【问题标题】:PS, Robocopy appending quotes to variable valuePS,Robocopy 将引号附加到变量值
【发布时间】:2022-02-19 15:45:45
【问题描述】:

我从高到低,尝试了所有我能想到的选项,但似乎无法找到解决方案。 我正在运行一个调用 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 网站和其他一堆。

【问题讨论】:

  • 为什么这个标签是r
  • 另外,您需要将函数ListFolder 移到顶部。现在您在 before 它被定义之前调用它。

标签: powershell robocopy


【解决方案1】:

如果您的路径包含空格,则需要使用引号,例如:

$Paths = '\\server\Org\Folder\TST\AC&DC Rock\Thunder Struck, Rosie and DirtyDeeds'

ForEach ($item in $Paths) {
        $Script = robocopy $('"' + $item + '"') NULL $Filter $params
}

希望有帮助吗?

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-01
      • 1970-01-01
      相关资源
      最近更新 更多