使用 robocopy 复制文件(长名称和路径,以及许多空格)- 缺少参数

Copying a file with robocopy (long name and path, and many spaces) - Missing argument

我尝试使用 robocopy 复制文件,但 PowerShell 给我一个错误“MissingArgument”:

robocopy D:\Enciclopedia` mia\Tutorial` FATTI` DA` ME\Internet\Google\Limitare` permessi` di` alcune` celle` o` colonne` o` righe` in` Google` Sheets C:\Users\Raffaele\Desktop Protect,` hide,` and` edit` sheets` -` Computer` (Proteggere,` limitare` permessi` di` alcune` celle` o` colonne` o` righe` in` Google` Sheets)` -` Docs` Editors` Help.pdf

文件名:

Protect, hide, and edit sheets - Computer (Proteggere, limitare permessi di alcune celle o colonne o righe in Google Sheets) - Docs Editors Help.pdf

文件路径:

D:\Enciclopedia mia\Tutorial FATTI DA ME\Internet\Google\Limitare permessi di alcune celle o colonne o righe in Google Sheets

我在不同的文件上使用了相同的命令,而且效果很好:

robocopy C:\Users\Raffaele\Desktop\Rapida C:\Users\Raffaele\Desktop\a BULK` MIO.pdf

你能告诉我如何解决这个问题吗?

值得听取 Theo's 建议:将包含空格和其他特殊字符的文件名 括在 单引号中('...', for verbatim values) or double quotes ("...", if you need string interpolation)是最简单的解决方案。[1]

虽然 使用 ` 单独 转义字符 ,但不包含引号确实有效,但 视觉上更少很明显,并且在您的情况下,很容易错过需要转义的字符:

在 PowerShell 中,,() 也是需要转义才能被逐字解释的元字符,而您忽略了对它们进行转义。

因此转义如下,以Write-Output为例说明名称解析正确:

PS> Write-Output D:\Enciclopedia` mia\Tutorial` FATTI` DA` ME\Internet\Google\Limitare` permessi` di` alcune` celle` o` colonne` o` righe` in` Google` Sheets C:\Users\Raffaele\Desktop` Protect`,` hide`,` and` edit` sheets` -` Computer` `(Proteggere`,` limitare` permessi` di` alcune` celle` o` colonne` o` righe` in` Google` Sheets`)` -` Docs` Editors` Help.pdf

D:\Enciclopedia mia\Tutorial FATTI DA ME\Internet\Google\Limitare permessi di alcune celle o colonne o righe in Google Sheets
C:\Users\Raffaele\Desktop Protect, hide, and edit sheets - Computer (Proteggere, limitare permessi di alcune celle o colonne o righe in Google Sheets) - Docs Editors Help.pdf

需要在未加引号的命令参数中单独转义的元字符列表:

<space> ' " ` , ; ( ) { } | & < > @ #

注:

  • 其中,< > @ # 仅在参数的 start 处特殊。
  • 在某些情况下.(点)也需要转义,即如果参数在句法上可以解释为访问变量的 属性(例如,Write-Output $env:computername.csv 什么都不输出 - 见 ).
  • 如果您希望逐字处理 $ 而不是引用变量或子表达式,您也必须将其转义。
  • 有关如何在 PowerShell 中解析不带引号的命令参数的完整概述,请参阅

[1] 所谓可扩展字符串中的字符串插值规则参见this answer for an overview of PowerShell string literals in general, and this answer的底部部分("..."), 具体来说.