首页 > 解决方案 > PS,Robocopy 将引号附加到变量值

问题描述

我看起来高低,尝试了我能想到的每一个选项,但似乎无法找到解决这个问题的方法。我正在运行一个调用 robocopy 的 PS 作业,以简单地获取输入文件 (CSV) 中给出的文件夹列表的文件夹/文件计数和父文件夹的大小。

这是一些代码(至少是重要的行)..

$Filter = '*.*'
$params = New-Object System.Collections.Arraylist
$params.AddRange(@("/L","/S","/NJH","/BYTES","/FP","/NFL","/MT:64","/NC","/NDL","/TS","/XJ","/R:0","/W:0"))
$InputFile = '\\server\org\archives\folder\Folders.csv'

$Paths = Get-Content $InputFile
    ForEach ($item in $Paths) {
        ListFolder $item

Function ListFolder {
$Script = robocopy $item NULL $Filter $params
}

奇怪的是上面的代码适用于这样的文件夹;
\server\Org\Folder\TST\AC&DC Rock

但是错误;
\server\Org\Folder\TST\AC&DC Rock\Thunder Struck、Rosie 和 DirtyDeeds

运行robocopy $Paths NULL $Filter $params

运行robocopy ""$Paths"" NULL $Filter $params

运行robocopy ''$Paths'' NULL $Filter $params
我得到:

Source: - \\server\Org\Folder\TST\AC&DC Rock\Thunder Struck, Rosie and DirtyDeeds\  
     Dest - \\.\NUL\  
    Files : *.*  
  Options : *.* /DCOPY:DA /COPY:DAT /R:1000000 /W:30  
------------------------------------------------------------------------------  
ERROR : Invalid Parameter #4 : "/L /S /NJH /BYTES /FP /NFL /MT:64 /NC /NDL /TS /XJ /R:0 /W:0"

是逗号吗?

运行robocopy "" + $Paths + "" NULL $Filter $params
我得到:

C:\Users\fisrt.last\+\
     Dest - \\server\Org\Folder\TST\AC&DC Rock\Thunder Struck, Rosie and DirtyDeeds\  
    Files : *.*  
  Options : *.* /DCOPY:DA /COPY:DAT /R:1000000 /W:30  
------------------------------------------------------------------------------  
ERROR : Invalid Parameter #6 : "/L /S /NJH /BYTES /FP /NFL /MT:64 /NC /NDL /TS /XJ /R:0 /W:0"

最后...
运行robocopy "$Paths" NULL $Filter $params
我得到:

Source - C:\Users\first.last\"\\server\Org\Folder\TST\AC&DC\  
     Dest - C:\Users\first.last\Rock\Thunder Struck, Rosie and DirtyDeeds\  
    Files : *.*  
  Options : *.* /DCOPY:DA /COPY:DAT /R:1000000 /W:30  
------------------------------------------------------------------------------  
ERROR : Invalid Parameter #10 : "/L /S /NJH /BYTES /FP /NFL /MT:64 /NC /NDL /TS /XJ /R:0 /W:0"

我已经尝试了许多其他迭代,如在此处发布的类似建议、MS 站点和许多其他迭代。

标签: powershellrobocopy

解决方案


使用 PowerShell - 一旦我从单引号切换到双引号,参数溅射对我有用。查看该用户的回答:https ://stackoverflow.com/a/45231586/15003410


推荐阅读