Получение текущего каталога при запуске EXE из контекстного меню
Я хотел бы создать набор папок из контекстного меню вместо одной папки.
Я создал пакетный скрипт, который может сделать это и поместить его в контекстное меню.
Я также создал небольшое консольное приложение C#, которое делает то же самое, но проблема в том, что скрипт / приложение может создавать папки только в определенном месте, которое вручную устанавливается в скрипте / приложении. По сути, я не могу создавать папки там, где я хочу, а только в том месте, которое я указал в скрипте / приложении.
Вопрос:
Есть ли способ получить текущий каталог OPEN, где вызывается контекстное меню, и передать его в консольное приложение?
Я хочу создать набор папок в текущем открытом каталоге из контекстного меню, если это имеет смысл.
Заранее спасибо.
ОБНОВЛЕНИЕ: это то, что я наконец-то придумал, и именно то, что мне нужно (хотя, это может быть неудачная реализация, так как это мое самое первое консольное приложение, но оно работает)
class CreateFolders
{
public static int countItem = 0;
public static void Main()
{
try
{
string path = Directory.GetCurrentDirectory ();
string originalPath = Directory.GetCurrentDirectory ();
string filePath = Environment.GetFolderPath(System.Environment.SpecialFolder.Personal) + "\\CreateFolders\\folders.txt";
string[] folders ={};
string line;
int counter = 0;
StreamReader file = new StreamReader (filePath);
if(new FileInfo(filePath).Length != 0)
{
List<string> folderNames = new List<string>();
while ((line = file.ReadLine ()) != null)
{
folderNames.Add (line);
counter++;
}
folders = folderNames.ToArray();
int arrayLength = folders.Length;
for (int i = 0; i < arrayLength; i++)
{
CreateFolder (path += "\\" + folders[i]);
path = originalPath;
}
if (countItem != 0)
{
Console.WriteLine ("\nGreat! {1} folders have been created in: {0}\n", originalPath, countItem);
}
} else
{
Console.WriteLine ("File is empty. Add names of your folders\n");
}
Console.WriteLine ("\n");
Console.ReadKey();
}
catch (Exception ex)
{
Console.WriteLine("Folders were not created :(\n");
Console.WriteLine(ex.Message);
Console.ReadKey();
}
}
static void CreateFolder(string path)
{
DirectoryInfo folder = new DirectoryInfo(path);
string dirName = folder.Name;
if (!Directory.Exists (path))
{
Directory.CreateDirectory (path);
path = " ";
Console.WriteLine ("{0} ok", dirName);
countItem++;
}
else
{
Console.WriteLine ("{0} exists", dirName);
}
}
}
1 ответ
Если вы хотите каталог, из которого запускается ваша программа, просто сделайте
var FolderPath = AppDomain.CurrentDomain.BaseDirectory;
В противном случае, чтобы отредактировать контекстное меню Windows: сначала создайте текстовый файл и скопируйте этот код внутрь, заменив MyFolder и MyProgram на путь и имя вашей программы:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\MyProgram]
@="&MyProgram"
[HKEY_CLASSES_ROOT\Directory\Background\shell\MyProgram\command]
@="C:\\MyFolder\\MyProgram.exe"
Затем переименуйте файл "SetRegistryValue.reg" и запустите его. Дважды щелкните, и все готово. Я сам проверял, решение приходит по этой ссылке.