我想从我的代码中运行一个Robocopy命令,但是它不想运行。
下面是我的代码:
ProcessStartInfo startInfo = new ProcessStartInfo("CMD.EXE");
startInfo.Arguments = string.Format("/C ROBOCOPY {0} {1} /E /MT:32", srcPath, dstPath);
Process.Start(startInfo);
我试过了:
Process.Start("CMD.EXE", string.Format("/C ROBOCOPY {0} {1} /E /MT:32", srcPath, dstPath));
但它也不工作。
我不知道为什么它只运行cmd没有参数,但当我复制/粘贴我的命令在cmd上它工作。
我看过关于这个问题的其他话题,但我都没有找到一个很好的答案。
应用程序是robocopy.exe
而不是cmd
。不是启动robocopy,而是启动一个控制台,并告诉它使用注入的参数启动robocopy
。这样很容易创建一个无效的参数字符串,特别是当文件名包含空格时。
使用robocopy.exe
作为可执行文件,并且只传递robocopy
参数给Arguments
属性。您必须确保路径参数被引用,以处理带有空格的路径,例如:
ProcessStartInfo startInfo = new ProcessStartInfo("robocopy");
startInfo.Arguments = string.Format(""{0}" "{1}" /E /MT:32", srcPath, dstPath);
Process.Start(startInfo);
或
Process.Start("robocopy", string.Format(""{0}" "{1}" /E /MT:32", srcPath, dstPath));
如果robocopy
在用户的PATH中,这将工作。如果没有,则必须将完整路径传递给可执行文件
你的代码为我工作
- 解决方案0(编辑)
你的路径应该使用双引号:
string.Format("/C ROBOCOPY "{0}" "{1}" /E /MT:32", srcPath, dstPath)
- 解决方案1
所以我猜问题是srcPath
和dstPath
。必须使用绝对路径!
例如:
srcPath = @"C:source";
dstPath = @"C:destiny";
- 解决方案2
如果这不是你的问题,检查你是否在源路径和目标路径上有write
和/或read
权限。
- 解决方案3
检查这个库:RoboSharp在Github上。它也可以在Nuget上使用。
- 解决方案4
由于您是从NETWORK复制,并且代码在cmd
中工作,可能问题是斜杠.
This:srcPath = "\127.0.0.1\";
不同于:srcPath = @"\127.0.0.1\";
.
请参阅此链接以了解有关@的更多信息.