Windows

robocopy 說它在 powershell 腳本中使用時接收到無效參數

  • July 30, 2014

我正在嘗試在 PowerShell 腳本中使用 robocopy,但目前失敗了。當我手動執行以下命令時

robocopy \\corporatesystem00.local.com\C$\Maven\ \\corporatesystem01.local.com\C$\Maven\ * /e /purge

我能夠將一個文件夾的所有內容複製到另一個文件夾,它就像魔術一樣工作。但是,鑑於 PowerShell 是多麼“精彩”,我想我遇到了一個未知的問題。當我從 PowerShell 腳本執行上述相同的命令時,我收到此錯誤:

PS C:\Program_Files> .\jenkins-maven-copy.ps1
Performing Jenkins Maven Sync
robocopy \\corporatesystem00.local.com\C$\Maven\ \\corporatesystem01.local.com\C$\Maven\ * /e /purge

-------------------------------------------------------------------------------
  ROBOCOPY     ::     Robust File Copy for Windows
-------------------------------------------------------------------------------

 Started : Wednesday, July 30, 2014 3:00:03 PM
  Source - \\corporatesystem00.local.com\C$\Maven\
    Dest - \\corporatesystem01.local.com\C$\Maven\

   Files : *

 Options : /DCOPY:DA /COPY:DAT /R:1000000 /W:30

------------------------------------------------------------------------------

ERROR : Invalid Parameter #4 : "/e /purge"

      Simple Usage :: ROBOCOPY source destination /MIR

            source :: Source Directory (drive:\path or \\server\share\path).
       destination :: Destination Dir  (drive:\path or \\server\share\path).
              /MIR :: Mirror a complete directory tree.

   For more usage information run ROBOCOPY /?


****  /MIR can DELETE files as well as copy them !

這發生在我為腳本中的選項輸入的任何命令行選項上。我正在執行的腳本如下。

Param (
   [string]$srcLocation = '\\corporatesystem00.local.com\C$\Maven\',
   [string]$destLocation = '\\corporatesystem01.local.com\C$\Maven\',
   [string]$files = '*',
   [string]$options = '/e /purge'
)

function syncMaven( $srcLocation, $destLocation, $files, $options )
{
   Write-Host "Performing Jenkins Maven Sync"
   Write-Host "robocopy $srcLocation $destLocation $files $options"
   robocopy $srcLocation $destLocation $files $options
}

syncMaven $srcLocation $destLocation $files $options

如果您查看之前的錯誤/輸出,它表明正在通過命令選項傳遞命令,但 robocopy 無法辨識它們或其他東西。

PS C:\Program_Files> .\jenkins-maven-copy.ps1
Performing Jenkins Maven Sync
robocopy \\corporatesystem00.local.com\C$\Maven\ \\corporatesystem01.local.com\C$\Maven\ * /e /purge

所以,我很茫然。

您可能可以通過在 PowerShell 中嘗試以下操作來重現您的問題:

robocopy a b * "/e /purge"

如果這是真的,那麼參數擴展就是導致您的問題的原因。要解決這個問題,你可以走這條路:

iex "$srcLocation $destLocation $files $options"

引用自:https://serverfault.com/questions/616725