Получение текущего каталога при запуске EXE из контекстного меню

  1. Я хотел бы создать набор папок из контекстного меню вместо одной папки.

  2. Я создал пакетный скрипт, который может сделать это и поместить его в контекстное меню.

  3. Я также создал небольшое консольное приложение 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" и запустите его. Дважды щелкните, и все готово. Я сам проверял, решение приходит по этой ссылке. Это то, что делает скрипт; моя программа называлась

Другие вопросы по тегам