2

我正在调用一个 .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 屏幕得到这个: 在此处输入图像描述

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

更新

使用阿兹瑞的代码:

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

我得到这个输出: 在此处输入图像描述

这实际上并没有复制文件。

4

4 回答 4

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/

于 2012-08-20T15:38:05.360 回答
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();

更好的选择是用等效的调用替换您的 XCOPY.BAT 文件正在执行的System.IO操作(然后您会得到错误处理)。

于 2012-08-20T15:39:42.490 回答
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.exexcopy.exe删除/k + batch.

于 2012-08-20T15:43:26.457 回答
0

传递参数?

http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true

于 2012-08-20T15:39:52.390 回答