diff --git a/.gitignore/.gitignore b/.gitignore/.gitignore
index 3e759b7..4780c83 100644
--- a/.gitignore/.gitignore
+++ b/.gitignore/.gitignore
@@ -25,7 +25,7 @@ bld/
[Ll]og/
# Visual Studio 2015/2017 cache/options directory
-.vs/
+.vs
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
diff --git a/ExeToBat.sln b/ExeToBat.sln
new file mode 100644
index 0000000..24ea6f9
--- /dev/null
+++ b/ExeToBat.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.28010.2036
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExeToBat", "ExeToBat\ExeToBat.csproj", "{04F45237-23C8-4EE6-B61C-6C47B9979A4B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {04F45237-23C8-4EE6-B61C-6C47B9979A4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {04F45237-23C8-4EE6-B61C-6C47B9979A4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {04F45237-23C8-4EE6-B61C-6C47B9979A4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {04F45237-23C8-4EE6-B61C-6C47B9979A4B}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {4AA99DAC-6B37-42AF-8FB7-8394329BD79A}
+ EndGlobalSection
+EndGlobal
diff --git a/ExeToBat/App.config b/ExeToBat/App.config
new file mode 100644
index 0000000..731f6de
--- /dev/null
+++ b/ExeToBat/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ExeToBat/BatGen.cs b/ExeToBat/BatGen.cs
new file mode 100644
index 0000000..4c9cfb0
--- /dev/null
+++ b/ExeToBat/BatGen.cs
@@ -0,0 +1,627 @@
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace ExeToBat
+{
+ static class Generator
+ {
+ public const int chunk = 8000;
+
+ public static List Sources = new List();
+
+ static void Main(string[] args)
+ {
+ MainMenu();
+ }
+
+ static void MainMenu()
+ {
+ List options = new List { "Files", "Generate" };
+
+ void DisplayTitle(List Options)
+ {
+ Console.WriteLine("ExeToBat > Main");
+ }
+
+ void DisplayOption(List Options, string o, int index, int i)
+ {
+ Console.WriteLine("[{0}] {1}", i, o);
+ }
+
+ bool ChoiceMethod(List Options, int index)
+ {
+ switch (Options[index])
+ {
+ case var i when i.Equals("Files"):
+ ChooseSource();
+ break;
+
+ case var i when i.Equals("Generate"):
+ BuildBat(Sources, "output.bat");
+ break;
+
+ default:
+ ResetInput();
+ break;
+ }
+ return false;
+ }
+
+ ListToMenu(options, DisplayTitle, DisplayOption, ChoiceMethod, true, "Exit");
+ }
+
+ static void ChooseSource()
+ {
+ void DisplayTitle(List sources)
+ {
+ Console.WriteLine("ExeToBat > Main > Files");
+ Console.WriteLine("[{0}] ({1})", Convert.ToString(0).PadLeft(Convert.ToString(sources.Count).Length, ' '), "Add Files");
+ }
+
+ void DisplayOption(List sources, SourceFile source, int index, int i)
+ {
+ Console.WriteLine("[{0}] {1}", Convert.ToString(i).PadLeft(Convert.ToString(sources.Count).Length, ' '), Path.GetFileName(source.File));
+ }
+
+ bool ZeroMethod()
+ {
+ AddSource();
+ return false;
+ }
+
+ bool ChoiceMethod(List sources, int index)
+ {
+ ManageSource(sources[index]);
+ return false;
+ }
+
+ List UpdateObjects(List sources)
+ {
+ return Sources;
+ }
+
+ ListToMenu(Sources, DisplayTitle, DisplayOption, ChoiceMethod, ZeroMethod, UpdateObjects);
+ }
+
+ static void AddSource()
+ {
+ string input = "";
+ bool IsInputValid = false;
+ while (!IsInputValid)
+ {
+
+ Console.Clear();
+ Console.WriteLine("ExeToBat > Main > Files > Add");
+ Console.Write("\n");
+ Console.Write("{0}> ", "File/Folder");
+ input = Console.ReadLine();
+
+ input.Trim();
+ input = input.Replace("\"", "");
+ if (!string.IsNullOrEmpty(input))
+ {
+ switch (input)
+ {
+ case var i when Directory.Exists(input):
+ IsInputValid = true;
+ foreach (string file in Directory.GetFiles(input))
+ {
+ Sources.Add(new SourceFile(file));
+ }
+ break;
+
+ case var i when File.Exists(input):
+ IsInputValid = true;
+ Sources.Add(new SourceFile(input));
+ break;
+
+ default:
+ ResetInput();
+ break;
+ }
+ }
+ else
+ {
+ IsInputValid = true;
+ }
+ }
+ }
+
+ static void ManageSource(SourceFile source)
+ {
+ List options = new List { "Edit", "Position", "Delete" };
+
+ void DisplayTitle(List Options)
+ {
+ Console.WriteLine("ExeToBat > Main > Files > {0}", Path.GetFileName(source.File));
+ }
+
+ void DisplayOption(List Options, string o, int index, int i)
+ {
+ Console.WriteLine("[{0}] {1}", i, o);
+ }
+
+ bool ChoiceMethod(List Options, int index)
+ {
+ switch (Options[index])
+ {
+ case var i when i.Equals("Edit"):
+ ModifySource(source);
+ break;
+
+ case var i when i.Equals("Position"):
+ EditPosition(source);
+ break;
+
+ case var i when i.Equals("Delete"):
+ Sources.Remove(source);
+ break;
+
+ default:
+ ResetInput();
+ break;
+ }
+ return false;
+ }
+
+ ListToMenu(options, DisplayTitle, DisplayOption, ChoiceMethod, true, "Exit");
+ }
+
+ static void ModifySource(SourceFile source)
+ {
+
+ List options = new List { "File", "Execute after extraction", "Extraction directory", "Parameters" };
+
+ Dictionary ValueMap = new Dictionary
+ {
+ { "File", "File" },
+ { "Execute after extraction", "Execute" },
+ { "Extraction directory", "Directory" },
+ { "Parameters", "Parameters" },
+ };
+
+ void DisplayTitle(List Options)
+ {
+ Console.WriteLine("ExeToBat > Main > Files > {0} > Edit", Path.GetFileName(source.File));
+ }
+
+ int MaxLength = options.Select(x => x.Length).Max();
+ void DisplayOption(List Options, string o, int index, int i)
+ {
+ Console.WriteLine("[{0}] {1} | {2}", i, o.PadRight(MaxLength, ' '), source.GetType().GetProperty(ValueMap[o]).GetValue(source).ToString());
+ }
+
+ bool ChoiceMethod(List Options, int index)
+ {
+ switch (Options[index])
+ {
+ case var i when i.Equals("File"):
+
+ break;
+
+ case var i when i.Equals("Execute after extraction"):
+ source.Execute = !source.Execute;
+ break;
+
+ case var i when i.Equals("Extraction directory"):
+ EditExtraction(source);
+ break;
+
+ case var i when i.Equals("Parameters"):
+ EditParameters(source);
+ break;
+
+ default:
+ ResetInput();
+ break;
+ }
+ return false;
+ }
+
+ ListToMenu(options, DisplayTitle, DisplayOption, ChoiceMethod);
+ }
+
+ static void EditExtraction(SourceFile source)
+ {
+ string input = "";
+ bool IsInputValid = false;
+ while (!IsInputValid)
+ {
+ Console.Clear();
+ Console.WriteLine("ExeToBat > Main > Files > {0} > Edit > Extraction", Path.GetFileName(source.File));
+ Console.Write("\n");
+ Console.WriteLine("Documentation: ");
+ Console.WriteLine("https://ss64.com/nt/syntax-variables.html");
+ Console.WriteLine("https://ss64.com/nt/syntax-args.html");
+ Console.Write("\n");
+ Console.Write("{0}> ", "Directory");
+ input = Console.ReadLine();
+
+ input.Trim();
+ if (!string.IsNullOrEmpty(input))
+ {
+ source.Directory = input;
+ IsInputValid = true;
+ }
+ else
+ {
+ IsInputValid = true;
+ }
+ }
+ }
+
+ static void EditParameters(SourceFile source)
+ {
+ string input = "";
+ bool IsInputValid = false;
+ while (!IsInputValid)
+ {
+ Console.Clear();
+ Console.WriteLine("ExeToBat > Main > Files > {0} > Edit > Parameters", Path.GetFileName(source.File));
+ Console.Write("\n");
+ Console.Write("{0}> ", "Parameters");
+ input = Console.ReadLine();
+
+ input.Trim();
+ if (!string.IsNullOrEmpty(input))
+ {
+ source.Parameters = input;
+ IsInputValid = true;
+ }
+ else
+ {
+ IsInputValid = true;
+ }
+ }
+ }
+
+ static void EditPosition(SourceFile source)
+ {
+ string input = "";
+ int index = -1;
+ bool IsInputValid = false;
+ while (!IsInputValid)
+ {
+ Console.Clear();
+ Console.WriteLine("ExeToBat > Main > Files > {0} > Position : {1}", Path.GetFileName(source.File), Sources.IndexOf(source));
+
+ Console.Write("\n");
+ Console.Write("{0}> ", "New index");
+ input = Console.ReadLine();
+
+ if (int.TryParse(input, out index))
+ {
+ if (index < Sources.Count)
+ {
+ Sources.Remove(source);
+ Sources.Insert(index, source);
+ IsInputValid = true;
+ }
+ else
+ {
+ ResetInput();
+ }
+ }
+ else
+ {
+ if (string.IsNullOrEmpty(input))
+ {
+ IsInputValid = true;
+ }
+ else
+ {
+ ResetInput();
+ }
+ }
+ }
+ }
+
+ static void BuildBat(List sources, string outputFile)
+ {
+ Console.Clear();
+ Console.WriteLine("ExeToBat > Main > Generate");
+
+ if(Sources.Any())
+ {
+ using (StreamWriter writer = new StreamWriter(outputFile))
+ {
+ Console.WriteLine("[ Writing ] basic batch structure...");
+ writer.WriteLine("@echo off");
+ writer.WriteLine(":: Auto-generated batch file by ExeToBat ::");
+ writer.WriteLine("");
+
+ foreach (SourceFile source in sources)
+ {
+
+ /*
+ byte[] fileBytes = File.ReadAllBytes(fileString);
+ string fileBase64 = Convert.ToBase64String(fileBytes);
+ List fileChunks = fileBase64.Chunks(chunk).ToList();
+ */
+
+ Console.WriteLine("[ Reading ] {0}", source.File);
+ List fileChunks = Convert.ToBase64String(File.ReadAllBytes(source.File)).Chunks(chunk).ToList();
+ string tempFile = Path.Combine("%temp%", source.Resource);
+ writer.WriteLine("(");
+
+ int pos = 0;
+ foreach (string part in fileChunks)
+ {
+ pos++;
+ Console.Write("[ Writing ] {0} part {1}/{2}\r", Path.GetFileName(source.File), pos.ToString().PadLeft(fileChunks.Count.ToString().Length, '0'), fileChunks.Count);
+ writer.WriteLine(string.Format("echo {0}", part));
+ }
+
+ Console.WriteLine();
+ writer.WriteLine(string.Format(") >> \"{0}\"", tempFile));
+ writer.WriteLine("");
+ writer.WriteLine(string.Format("certutil -decode \"{0}\" \"{1}\" >nul 2>&1", tempFile, Path.Combine(source.Directory, Path.GetFileName(source.File))));
+ writer.WriteLine("del /f /q \"{0}\" >nul 2>&1", tempFile);
+ writer.WriteLine("");
+ if (source.Execute)
+ {
+ Console.WriteLine("[ Writing ] execute mechanism");
+ writer.WriteLine(string.Format("\"{0}\" {1}", Path.Combine(source.Directory, Path.GetFileName(source.File)), source.Parameters));
+ writer.WriteLine("");
+ }
+ writer.FlushAsync();
+ Console.WriteLine("[Generated] {0}", Path.GetFileName(source.File));
+ }
+
+ Console.WriteLine("Press anything...");
+ Console.ReadKey();
+
+ }
+ }
+ else
+ {
+ Console.WriteLine("No files specified");
+ new System.Threading.ManualResetEvent(false).WaitOne(500);
+
+ }
+
+
+ }
+
+ public class SourceFile
+ {
+ public string File { get; set; }
+ public bool Execute { get; set; } = false;
+ public string Resource { get; set; } = GenTemp();
+ public string Directory { get; set; } = "%~dp0";
+ public string Parameters { get; set; } = "";
+
+ public SourceFile(string file)
+ {
+ File = file;
+ }
+
+ static public string GenTemp()
+ {
+ return string.Format("{0}{1}{2}", "res_", new Random().Next(1000, 10000), ".b64");
+ }
+
+ }
+
+ static string[] Chunks(this string toSplit, int chunkSize)
+ {
+ int stringLength = toSplit.Length;
+
+ int chunksRequired = (int)Math.Ceiling(stringLength / (decimal)chunkSize);
+ var stringArray = new string[chunksRequired];
+
+ int lengthRemaining = stringLength;
+
+ for (int i = 0; i < chunksRequired; i++)
+ {
+ int lengthToUse = Math.Min(lengthRemaining, chunkSize);
+ int startIndex = chunkSize * i;
+ stringArray[i] = toSplit.Substring(startIndex, lengthToUse);
+
+ lengthRemaining = lengthRemaining - lengthToUse;
+ }
+
+ return stringArray;
+ }
+
+
+ public static void ListToMenu(List Objects, Action> DisplayTitle, Action, T, int, int> DisplayOptions, Func, int, bool> ChoiceMethod, bool UserCanAbort = true, string BackString = "Back")
+ {
+ ListToMenu(Objects, DisplayTitle, DisplayOptions, ChoiceMethod, () => { ResetInput(); return false; }, (List List) => { return List; }, UserCanAbort, BackString);
+ }
+
+ public static void ListToMenu(List Objects, Action> DisplayTitle, Action, T, int, int> DisplayOptions, Func, int, bool> ChoiceMethod, Func ZeroMethod, Func, List> UpdateObjects, bool UserCanAbort = true, string BackString = "Back")
+ {
+ int index = -1;
+ string InputString = "";
+ bool IsMenuExitPending = false;
+ while (!IsMenuExitPending)
+ {
+ Console.Clear();
+ int printedEntries = 0;
+ Objects = UpdateObjects(Objects);
+ DisplayTitle(Objects);
+ if (Objects.Any())
+ {
+ int i = 0;
+ foreach (T x in Objects)
+ {
+ i++;
+ if (InputString == "")
+ {
+ DisplayOptions(Objects, x, i - 1, i);
+ printedEntries++;
+ }
+ else
+ {
+ if (Convert.ToString(i).StartsWith(InputString) || Convert.ToString(i) == InputString)
+ {
+ DisplayOptions(Objects, x, i - 1, i);
+ printedEntries++;
+ }
+ }
+
+ if (Objects.Count > Console.WindowHeight - 5)
+ {
+ if (printedEntries == Console.WindowHeight - 6)
+ {
+ Console.WriteLine("[{0}]", ".".PadLeft(Convert.ToString(Objects.Count).Length, '.'));
+ break;
+ }
+ }
+ else { if (printedEntries == Console.WindowHeight - 5) { break; } }
+ }
+ }
+
+ if (UserCanAbort)
+ {
+ Console.WriteLine("[{0}] {1}", "q".PadLeft(Convert.ToString(Objects.Count).Length, ' '), BackString);
+ }
+ Console.Write("\n");
+
+ bool IsInputValid = false;
+ while (!IsInputValid)
+ {
+ Console.Write("{0}> {1}", "", InputString);
+ string input = Console.ReadKey().KeyChar.ToString();
+ new System.Threading.ManualResetEvent(false).WaitOne(20);
+ switch (input)
+ {
+ case "q":
+ if (UserCanAbort)
+ {
+ Console.Write("\n");
+ IsInputValid = true;
+ IsMenuExitPending = true;
+ }
+ else
+ {
+ Console.Write("\n");
+ ResetInput();
+ }
+ break;
+
+ case "\b":
+ if (!(InputString == ""))
+ {
+ Console.Write("\b");
+ InputString = InputString.Remove(InputString.Length - 1);
+ }
+ IsInputValid = true;
+ break;
+
+ case "\n":
+ case "\r":
+ if (InputString != "")
+ {
+ index = Convert.ToInt32(InputString) - 1;
+ InputString = "";
+ IsInputValid = true;
+ if (ChoiceMethod(Objects, index))
+ {
+ IsMenuExitPending = true;
+ }
+ }
+ break;
+
+ default:
+ Console.Write("\n");
+ int choice;
+ if ((int.TryParse(input, out choice)))
+ {
+ if ((InputString == "") && (choice == 0))
+ {
+ IsInputValid = true;
+ if (ZeroMethod())
+ {
+ IsMenuExitPending = true;
+ }
+ }
+ else
+ {
+ if (Convert.ToInt32(InputString + Convert.ToString(choice)) <= Objects.Count)
+ {
+ int MatchingItems = 0;
+ InputString = InputString + Convert.ToString(choice);
+ for (int i = 0; i < Objects.Count; i++) { if (Convert.ToString(i + 1).StartsWith(InputString) || Convert.ToString(i + 1) == InputString) { MatchingItems++; } }
+ if ((InputString.Length == Convert.ToString(Objects.Count).Length) || (MatchingItems == 1))
+ {
+ index = Convert.ToInt32(InputString) - 1;
+ InputString = "";
+ IsInputValid = true;
+ if (ChoiceMethod(Objects, index))
+ {
+ IsMenuExitPending = true;
+ }
+ }
+ else
+ {
+ IsInputValid = true;
+ }
+ }
+ else
+ {
+ ResetInput();
+ }
+ }
+ }
+ else
+ {
+ ResetInput();
+ }
+ break;
+ }
+ }
+ }
+ Console.Clear();
+ }
+
+ public static void YesNoMenu(string title, Action Yes, Action No)
+ {
+ bool IsInputValid = false;
+ while (!IsInputValid)
+ {
+ Console.Write("{0}? [{1}]> ", title, "Y/N");
+ string Input = Console.ReadKey().KeyChar.ToString();
+ new System.Threading.ManualResetEvent(false).WaitOne(20);
+ Console.Write("\n");
+ if (string.Equals(Input, "Y", StringComparison.OrdinalIgnoreCase))
+ {
+ IsInputValid = true;
+ Yes();
+
+ }
+ else if (string.Equals(Input, "N", StringComparison.OrdinalIgnoreCase))
+ {
+ IsInputValid = true;
+ No();
+ }
+ else
+ {
+ ResetInput();
+ }
+ }
+ }
+
+ public static void ResetInput(string error = "Input Invalid")
+ {
+ Console.Write(string.Format("[{0}] {1}", "Error", error));
+ new System.Threading.ManualResetEvent(false).WaitOne(150);
+ ClearCurrentConsoleLine();
+ Console.SetCursorPosition(0, Console.CursorTop - 1);
+ ClearCurrentConsoleLine();
+ }
+
+ public static void ClearCurrentConsoleLine()
+ {
+ int currentLineCursor = Console.CursorTop;
+ Console.SetCursorPosition(0, Console.CursorTop);
+ Console.Write(new string(' ', Console.BufferWidth));
+ Console.SetCursorPosition(0, currentLineCursor);
+ }
+
+ }
+
+}
diff --git a/ExeToBat/ExeToBat.csproj b/ExeToBat/ExeToBat.csproj
new file mode 100644
index 0000000..fcf647c
--- /dev/null
+++ b/ExeToBat/ExeToBat.csproj
@@ -0,0 +1,53 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {04F45237-23C8-4EE6-B61C-6C47B9979A4B}
+ Exe
+ ExeToBat
+ ExeToBat
+ v4.6.1
+ 512
+ true
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ExeToBat/Properties/AssemblyInfo.cs b/ExeToBat/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..6af03c8
--- /dev/null
+++ b/ExeToBat/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Allgemeine Informationen über eine Assembly werden über die folgenden
+// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
+// die einer Assembly zugeordnet sind.
+[assembly: AssemblyTitle("ExeToBat")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ExeToBat")]
+[assembly: AssemblyCopyright("Copyright © 2018")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
+// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
+// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
+[assembly: ComVisible(false)]
+
+// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
+[assembly: Guid("04f45237-23c8-4ee6-b61c-6c47b9979a4b")]
+
+// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
+//
+// Hauptversion
+// Nebenversion
+// Buildnummer
+// Revision
+//
+// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
+// übernehmen, indem Sie "*" eingeben:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/ExeToBat/bin/Debug/ExeToBat.exe b/ExeToBat/bin/Debug/ExeToBat.exe
new file mode 100644
index 0000000..aa21925
Binary files /dev/null and b/ExeToBat/bin/Debug/ExeToBat.exe differ
diff --git a/ExeToBat/bin/Debug/ExeToBat.exe.config b/ExeToBat/bin/Debug/ExeToBat.exe.config
new file mode 100644
index 0000000..731f6de
--- /dev/null
+++ b/ExeToBat/bin/Debug/ExeToBat.exe.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ExeToBat/bin/Debug/ExeToBat.pdb b/ExeToBat/bin/Debug/ExeToBat.pdb
new file mode 100644
index 0000000..7dfdec3
Binary files /dev/null and b/ExeToBat/bin/Debug/ExeToBat.pdb differ
diff --git a/ExeToBat/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/ExeToBat/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 0000000..a196316
Binary files /dev/null and b/ExeToBat/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/ExeToBat/obj/Debug/ExeToBat.csproj.CoreCompileInputs.cache b/ExeToBat/obj/Debug/ExeToBat.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..3cbaf74
--- /dev/null
+++ b/ExeToBat/obj/Debug/ExeToBat.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+b8aed06ba176392381f740b7836056f6d240c92e
diff --git a/ExeToBat/obj/Debug/ExeToBat.csproj.FileListAbsolute.txt b/ExeToBat/obj/Debug/ExeToBat.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..1b59a6e
--- /dev/null
+++ b/ExeToBat/obj/Debug/ExeToBat.csproj.FileListAbsolute.txt
@@ -0,0 +1,7 @@
+D:\Bibliotheken\Documents\Visual Studio 2017\Projects\ExeToBat\ExeToBat\bin\Debug\ExeToBat.exe.config
+D:\Bibliotheken\Documents\Visual Studio 2017\Projects\ExeToBat\ExeToBat\bin\Debug\ExeToBat.exe
+D:\Bibliotheken\Documents\Visual Studio 2017\Projects\ExeToBat\ExeToBat\bin\Debug\ExeToBat.pdb
+D:\Bibliotheken\Documents\Visual Studio 2017\Projects\ExeToBat\ExeToBat\obj\Debug\ExeToBat.csproj.CoreCompileInputs.cache
+D:\Bibliotheken\Documents\Visual Studio 2017\Projects\ExeToBat\ExeToBat\obj\Debug\ExeToBat.exe
+D:\Bibliotheken\Documents\Visual Studio 2017\Projects\ExeToBat\ExeToBat\obj\Debug\ExeToBat.pdb
+D:\Bibliotheken\Documents\Visual Studio 2017\Projects\ExeToBat\ExeToBat\obj\Debug\ExeToBat.csprojAssemblyReference.cache
diff --git a/ExeToBat/obj/Debug/ExeToBat.csprojAssemblyReference.cache b/ExeToBat/obj/Debug/ExeToBat.csprojAssemblyReference.cache
new file mode 100644
index 0000000..3211068
Binary files /dev/null and b/ExeToBat/obj/Debug/ExeToBat.csprojAssemblyReference.cache differ
diff --git a/ExeToBat/obj/Debug/ExeToBat.exe b/ExeToBat/obj/Debug/ExeToBat.exe
new file mode 100644
index 0000000..aa21925
Binary files /dev/null and b/ExeToBat/obj/Debug/ExeToBat.exe differ
diff --git a/ExeToBat/obj/Debug/ExeToBat.pdb b/ExeToBat/obj/Debug/ExeToBat.pdb
new file mode 100644
index 0000000..7dfdec3
Binary files /dev/null and b/ExeToBat/obj/Debug/ExeToBat.pdb differ
diff --git a/ExeToBat/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs b/ExeToBat/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
new file mode 100644
index 0000000..e69de29
diff --git a/ExeToBat/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs b/ExeToBat/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
new file mode 100644
index 0000000..e69de29
diff --git a/ExeToBat/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs b/ExeToBat/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
new file mode 100644
index 0000000..e69de29