使用 robocopy 的源目录中的参数无效

Invalid Parameter in source dir using robocopy

我正在使用 robocopy 从一个目录复制到另一个目录。

我已经使用其他源目录测试了代码,但在执行一个特定目录时出现错误:

set "source=C:\Program Files (x86)\Phoresis\Backup"

我收到错误:

Invalid paramter 3 "(x86)\Phoresis\Backup"

已尝试使用单引号并将变量赋值包含在“”中,因为目录路径中有空格。

代码:

set "newDirectory=F:\Cap2 Flex Backup"

REM Timesatmp a new folder
set "DirName=%date:~-4,4%.%date:~-7,2%.%date:~0,2%.%time:~0,2%.%time:~3,2%
MD \%newDirectory%"

set "source=C:\Program Files (x86)\Phoresis\Backup"

robocopy %source% %DirName% /e /z /Mir

我正在努力了解 vb scripts/batch 中的 spaces/special 个字符,因此欢迎任何意见。

干杯

代码中的主要问题是,robocopy 命令行中的源目录和目标目录周围没有引号 ""。由于它们包含空格,因此被解释为参数分隔符;因此 %source% 被扩展为值 C:\Program Files (x86)\Phoresis\Backup,将被解释为三个参数 C:\ProgramFiles(x86)\Phoresis\Backup。为避免这种情况,请将 "" 放在路径参数周围,例如 "%source%".

固定代码如下:

set "newDirectory=F:\Cap2 Flex Backup"
md "%newDirectory%"

rem Timesatmp a new folder
set "DirName=%newDirectory%\%date:~-4,4%.%date:~-7,2%.%date:~0,2%.%time:~0,2%.%time:~3,2%"

set "source=C:\Program Files (x86)\Phoresis\Backup"

robocopy "%source%" "%DirName%" /e /z /Mir

其他issues/notes:

  • 尽管您在 set 命令行中使用了引号,这避免了一些特殊字符的麻烦(&^() , SPACE, 等等), "" 不是存储在变量中的值的一部分;因此,在扩展(读取)变量时,您需要再次处理这些特殊字符,方法是用 "";
  • 包围读取的变量
  • md 命令已修复(有前导 \,但没有空缺 ")并向上移动;
  • 变量 DirName 现在还包含存储在变量 newDirectory 中的父(根)目标目录 F:\Cap2 Flex Backup,以避免 robocopy 的相对路径;由于 source 也包含绝对路径,因此可以在任何位置定位和执行脚本;
  • 注意 %date%%time% 检索的时间戳取决于系统的语言环境和区域设置;因此这个脚本不是很便携;请参阅 this post 来克服它;