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

Posted

技术标签:

【中文标题】使用 robocopy 复制文件(长名称和路径,以及许多空格) - 缺少参数【英文标题】:Copying a file with robocopy (long name and path, and many spaces) - Missing argument 【发布时间】:2021-05-23 20:46:07 【问题描述】:

我尝试使用 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

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

【问题讨论】:

尝试引用路径 ('C:\Users\Raffaele\Desktop\a BULK MIO.pdf') 而不是添加所有这些反引号。 (尽管这第一个非常长的路径和文件名可能会导致麻烦)。为什么会有这样 LOOOOOOOONG 的名字? 【参考方案1】:

值得留意Theo's 的建议:将包含空格和其他特殊字符的文件名括在单引号中('...'逐字 values)双引号("...",如果需要字符串插值 是最简单的解决方案。[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> ' " ` , ; ( )   | & < > @ #

注意:

其中,&lt; &gt; @ # 仅在参数的开始处是特殊的。 情况.(点)也需要转义,即如果参数可以在语法上解释为访问变量的属性(例如,Write-Output $env:computername.csv 不输出任何内容 - 请参阅 this answer)。 如果您希望 $ 被逐字处理而不是引用变量或子表达式,您也必须对其进行转义。 有关如何在 PowerShell 中解析不带引号的命令参数的完整概述,请参阅 this answer。

[1] 请参阅this answer 的底部部分了解 PowerShell 字符串字面量 的一般概述,以及 this answer 了解所谓的 中的字符串插值规则>可扩展字符串 ("..."),特别是。

【讨论】:

以上是关于使用 robocopy 复制文件(长名称和路径,以及许多空格) - 缺少参数的主要内容,如果未能解决你的问题,请参考以下文章

Robocopy 可以与 refs 文件系统配合使用,以提高数据复制和同步的效率和可靠性

ROBOCOPY更改输入路径名称,但不起作用

Windows中删除路径太长目录及文件

用于将文件复制到 50 多台远程计算机的 Robocopy 命令

robocopy、jungledisk 文件复制问题

ex22.py