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

时间:2015-12-02 17:02:15

标签: batch-file directory robocopy

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

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

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

我收到错误:

  

无效的参数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脚本/批处理中的空格/特殊字符,以便对任何输入表示赞赏。

干杯

1 个答案:

答案 0 :(得分:0)

代码中的主要问题是,""命令行中的源目录和目标目录周围没有引号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

其他问题/说明:

  • 虽然您在set命令行中使用了引号,但这可以避免一些特殊字符(&^(),< kbd> SPACE 等),""不是存储在变量中的值的一部分;因此,在扩展(读取)变量时,您需要再次处理这些特殊字符,方法是将读取变量包围"";
  • md命令已修复(有一个前导\,但没有开放")并向上移动;
  • 变量DirName现在还包含父(根)目标目录F:\Cap2 Flex Backup,它存储在变量newDirectory中,以避免robocopy的相对路径;由于source也包含绝对路径,因此可以在任何地方找到并执行脚本;
  • 认为%date%%time%检索的时间戳取决于系统的区域设置和区域设置;因此这个脚本不太便于携带;见this post以克服这个问题;