11

I have a batch file like this

@echo off
xcopy /e %1 %2

I have my C# code as follows:

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();

I expect this to copy the source files to target location. But nothing happens. My console window also does not stay for enough time so that I can see the error. Can anyone guide to achieve this. I am new in batch files processing.

Edit

By adding a pause in the end of batch file. Able to reproduce error. Getting error as

Files not found - Program

Running batch file directly does work fine. Just now noticed......when source path has any spaces....I am getting error

Sandy
  • 11,332
  • 27
  • 76
  • 122

4 Answers4

14

What about quoting argument?

Arguments = String.Format("\"{0}\" \"{1}\"", _sourcePath, _tempTargetPath) …
Viacheslav Ivanov
  • 1,535
  • 13
  • 22
6

.bat file is a text file, in order to execute it, you should start cmd process. Start it like this:

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

Additional arguments may follow. Try this without c#, in a cmd window, or Run dialog.

Vladimir Perevalov
  • 4,059
  • 18
  • 22
3

try

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

i.e. add *.* to the source path

and add a 3rd line pause to the batch file

@echo off
copy /e %1 %2
pause
qujck
  • 14,388
  • 4
  • 45
  • 74
  • thanks.....getting error as `Files not found - Program`. Edited my post with sourcepath changed. – Sandy Jan 24 '13 at 09:57
  • That may be due to the paths - are there any files in the source folder (and you do need `*.*` for the xcopy command) - I have it running here. – qujck Jan 24 '13 at 09:58
  • I have files in Source path. Running batch file directly does work fine. Just now noticed......when source path has any spaces....I am getting error – Sandy Jan 24 '13 at 10:04
  • paths with spaces will need to be wrapped in "'s or use the DOS 8 character path. – qujck Jan 24 '13 at 10:13
0

I have found that using this approach or calling cmd.exe is problematic with long argument lists. For those cases, I have found that using powershell.exe instead of cmd.exe to work well:

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}' '{2}'\"",
            MyBatchFile,
            _sourcePath,
            _tempTargetPath)
        }
};
process.StartInfo.FileName = @"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe";
bool b = process.Start();

Note that the entire arguments list needs to be wrapped in quotes and the batch file path is preceeded by an &.

Allen Pestaluky
  • 3,126
  • 2
  • 20
  • 22