2010-11-02 3 views
1

Мы копируем много данных в нашей организации, и нам нравится использовать RoboCopyPlus для обеспечения надежности и отчетов по электронной почте в конце.Скопировать контекстное меню папки требуется вход пользователя

Я добавил строку RoboCopyPlus в контекстное меню папки в реестре:

cmd /c robocopyplus "%1" "C:\Data" *.* /s 

Но это означает, что я могу только скопировать папку C: \ Data.

Каков наилучший способ запросить ввод пользователя или создать переменную, которую я могу передать команде? В идеале я бы хотел, чтобы диалог браузера папок всплывал и спрашивал их о местоположении, но, признавая, что это, вероятно, усложняет этот вопрос, как я могу запросить ввод пользователя в оболочку?

ответ

1

Напишите простое приложение, чтобы пользователь мог выбрать файл, затем запустите RoboCopyPlus, используя выбранный путь. Добавьте запись в контекстное меню, которое запускает это приложение. Вот пример в C#, используя класс FolderBrowserDialog и Process.Start().

using System; 
using System.Diagnostics; 
using System.Windows.Forms; 
namespace RobocopyLauncher 
{ 
    class Launcher 
    { 
     static void Main(string[] args) 
     { 
      FolderBrowserDialog browser = new FolderBrowserDialog(); 
      if (browser.ShowDialog() == DialogResult.OK && args.Length == 1) 
      { 
       // Not sure of the exact command but it would be 
       // something like this 
       Process.Start(string.Format("robocopyplus \"{0}\" \"{1}\"", 
        args[0], browser.SelectedPath); 
      } 
     } 
    } 
} 
+0

Спасибо, пончик. Это меня очень близко - мне пришлось добавить [STAThread] выше метода Main, но теперь он отобразит FolderBrowser. К сожалению, он не начнет процесс. Я подозреваю, что это потому, что строка, вызываемая Process.Start, неверна, но я не могу найти способ точно проверить, что выводит строка. Не могли бы вы рассказать мне, что {0} и {1}? –

+0

Дэвид, мне нужно будет увидеть документацию для RoboCopyPlus, и я не смог найти его в Интернете. В моем примере '{0}' is 'args [0]' - путь, который вы пытаетесь скопировать, и '{1}' is 'browser.SelectedPath' - путь, который вы пытаетесь скопировать к. У вас есть документация аргументов командной строки, которые поддерживает RoboCopyPlus? – Donut

+0

Donut, RoboCopyPlus - это оболочка для RoboCopy и использует тот же синтаксис: http://www.mydigitallife.info/2007/05/07/robocopy-syntax-command-line-switches-and-examples/ дает вам подробную информацию для синтаксиса, но это в основном, как вы указали. Точный синтаксис, передаваемый процессу, поэтому (исключая квадратные скобки) [robocopy "C: \ Data \" "C: \ Data2 \"]. Если я заменил два аргумента жестко закодированными папками, то при запуске процесса он должен скопировать данные, не так ли? –

Смежные вопросы