为什么我无法使用 Process.Start 启动 Robocopy



我想从我的代码中运行一个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

所以我猜问题是srcPathdstPath。必须使用绝对路径!

例如:

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\";.

请参阅此链接以了解有关@的更多信息.

相关内容

最新更新