【问题标题】:Robocopy not functioning in Powershell scriptRobocopy 在 Powershell 脚本中不起作用
【发布时间】:2020-05-31 17:51:52
【问题描述】:

我在通过 Powershell 脚本使用 RoboCopy.exe 时遇到了一些问题。函数如下...

function copyFiles{
    Start-Process "RoboCopy.exe" -ArgumentList "'C:\Test' 'C:\test2' /copyall"
    Write-Host 'Test'
}

“测试”输出到控制台,但副本不运行。我最初试图用变量作为目录进行复制,但我把它归结为这个,因为那不起作用。在目录“test1”中有一个 .txt 文件,“test2”存在但为空。我也试过没有那个目录。

它在另一个文件中被调用:

. .\rCopy.ps1
copyFiles

现在,我尝试使用以下代码将日志输出到文件中,但它给了我一个权限错误。 “Out-File : 访问路径 'C:\Users\Me\Desktop' 被拒绝”。我也尝试直接输出到 C:\ 但这给出了同样的错误。 Powershell 正在以管理员身份运行。

$testCopy = Start-Process "RoboCopy.exe" -ArgumentList "'C:\Test' 'C:\test2' /copyall"
$testCopy | Out-File -LiteralPath "C:\Users\Me\

要关闭,我还尝试在主脚本中运行“Start-Process 'RoboCopy.exe' -ArgumentList 'C:\test' 'C:\test2' /copyall”,而不从另一个调用该函数。

任何帮助将不胜感激。

【问题讨论】:

  • 您是否在 powershell 之外测试过 robocopy 语法?目标目录是否已经存在? Out-File 需要文件名,而不是路径。确保您有权将文件复制到目的地,或者在本例中为 c:
  • 顺便说一句:您使用Start-Process 可能是有意在新窗口 中异步 运行RocoCopy.exe,但更多典型情况是同步在同一窗口中执行控制台应用程序,在这种情况下您需要直接调用它们(c:\path\to\some.exe ...或@ 987654329@) - 见this answer。在新窗口中异步执行的替代方法是使用background job。

标签: powershell robocopy


【解决方案1】:

我能够通过使用以下语法使其工作:

Start-Process "RoboCopy.exe" -argumentlist "`"$localDir`" `"$networkDir`"  "

我无法从一开始就尝试复制的目录中复制,但我认为这是权限问题。

【讨论】:

    【解决方案2】:

    您的own solution 有效:引用的参数传递给外部程序,例如(单个)-ArgumentList 参数中的Robocopy.exe 需要嵌入双引号 ("),而不是单个引号 (')。

    通常,外部程序不将' 识别为命令行上的字符串分隔符,这甚至适用于通过其CLI 的-File 参数调用PowerShell 本身。

    即使您要将参数一个接一个传递给-ArgumentList:

    # Note the individual arguments.
    # !! Works in this case, but with paths that have *embedded spaces*
    # !! you  would still need embedded "..." quoting.
    Start-Process Robocopy.exe -ArgumentList 'C:\Test', 'C:\test2', '/copyall'
    

    您仍然需要在单个参数中使用嵌入的"..." 引用,这些参数(可能)包含嵌入的空格(例如,'"C:\Test 1"' 或带有变量参考,"`"$dir`"",由于 long-standing bug。

    有关背景信息,请参阅this answer。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多