将文件路径传递到批处理文件

时间:2012-08-20 15:36:47

标签: c# batch-file xcopy

我正在将一个.bat文件调用到XCOPY文件夹中。无论如何都要将文件名和目的地传递到批处理文件中吗?

我的.bat文件

XCOPY %1 %2
pause

我用来调用.bat的代码就是:

process.Start(@"C:\Documents and Settings\cmolloy\My Documents\Test\XCOPY.bat");

我试过这段代码

process.Start(@"C:\Documents and Settings\cmolloy\My Documents\Test\XCOPY.bat" , copyfrom copyto);

因为我以前用过关闭我的comp,但它不适用于此。

由于

更新

process.StartInfo.FileName = @"C:\Documents and Settings\cmolloy\My Documents\Test\XCOPY.bat";
process.StartInfo.Arguments = copyFrom.ToString();
process.StartInfo.Arguments = copyTo.ToString();
process.Start();

这是我正在使用的代码,但它不起作用。我从XCOPY屏幕上得到这个: enter image description here

所以它看起来不像是采用完整的文件路径。 copyto和copyfrom是包含路径的变量。

更新

使用azhrei的代码:

String batch = @"C:\Documents and Settings\cmolloy\My Documents\Test\XCOPY.bat";
String src = @"C:\Tricky File Path\Is Here\test1.txt";
String dst = @"C:\And\Goes Here\test2.txt";  
String batchCmd = String.Format("\"{0}\" \"{1}\" \"{2}\"", batch, src, dst);

process.StartInfo.FileName = "cmd.exe";
process.StartInfo.Arguments = String.Format("/k \"echo {0}\"", batchCmd);

process.Start();

我收到了这个输出: enter image description here

实际上并没有复制文件。

4 个答案:

答案 0 :(得分:1)

您可以使用Arguments属性

Process proce = new Process();
proce.StartInfo.FileName = "yourfile.exe";
proce.StartInfo.Arguments =  ..;
proce.Start();

文章:http://www.c-sharpcorner.com/UploadFile/jawedmd/xcopy-using-C-Sharp-to-copy-filesfolders/

答案 1 :(得分:1)

将其替换为

var process = new Process();
process.StartInfo.FileName = @"C:\Documents and Settings\cmolloy\My Documents\Test\XCOPY.bat";
process.StartInfo.Arguments = // my arguments
process.Start();

更好的选择是用System.IO中的等效调用替换你的XCOPY.BAT文件正在做的事情(然后你会得到错误处理)。

答案 2 :(得分:1)

您正在启动批处理文件 - 您需要使用cmd.exe

"围绕每个参数(如果参数有空格,则需要)。

  String batch = @"C:\Documents and Settings\cmolloy\My Documents\Test\XCOPY.bat";
  String src = @"C:\Tricky File Path\Is Here\test1.txt";
  String dst = @"C:\And\Goes Here\test2.txt";  
  String batchCmd = String.Format("\"{0}\" \"{1}\" \"{2}\"", batch, src, dst);

  process.StartInfo.FileName = "cmd.exe";
  process.StartInfo.Arguments = String.Format("/k \"{0}\"", batchCmd);

  process.Start();

如果您的批处理文件字面上只有xcopies,那么您只需将cmd.exe替换为xcopy.exe并删除/k + batch

答案 3 :(得分:0)