web-dev-qa-db-ja.com

C#からの引数を使用してバッチファイルを実行する

私はこのようなバッチファイルを持っています

@echo off
xcopy /e %1 %2

私は次のように私のC#コードを持っています:

string MyBatchFile = @"C:\Program Files (x86)\MybatchFile.bat";
string _sourcePath = @"C:\FolderToCopy";
string _tempTargetPath = @"C:\TargetFolder\";

var process = new Process { 
                   StartInfo = { 
                      Arguments = string.Format("{0} {1}",
                                                _sourcePath,
                                                _tempTargetPath) 
                                } 
                          };
process.StartInfo.FileName = MyBatchFile;
bool b = process.Start();

これにより、ソースファイルがターゲットの場所にコピーされると思います。しかし、何も起こりません。コンソールウィンドウも十分な時間表示されないため、エラーが表示されます。誰もがこれを達成するために導くことができますか?私はバッチファイル処理に不慣れです。

編集

バッチファイルの最後にpauseを追加する。エラーを再現できます。としてエラーを取得

Files not found - Program

バッチファイルを直接実行することは問題なく機能します。ちょうど今気づいた......ソースパスにスペースがあるとき....エラーが発生しています

9
Sandy

議論を引用するのはどうですか?

Arguments = String.Format("\"{0}\" \"{1}\"", _sourcePath, _tempTargetPath) …
12

.batファイルはテキストファイルです。実行するには、cmdプロセスを開始する必要があります。このように開始します。

System.Diagnostics.Process.Start("cmd.exe", "/c yourbatch.bat");

追加の議論が続くかもしれません。 cmdウィンドウ、または実行ダイアログで、c#なしでこれを試してください。

6

試してみてください

string MyBatchFile = @"C:\MybatchFile.bat";
string _sourcePath = @"C:\FolderToCopy\*.*";
string _tempTargetPath = @"C:\TargetFolder\";

つまり、ソースパスに*.*を追加します

3行目pauseをバッチファイルに追加します

@echo off
copy /e %1 %2
pause
2
qujck