我正在使用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脚本/批处理中的空格/特殊字符,以便对任何输入表示赞赏。
干杯
答案 0 :(得分:0)
代码中的主要问题是,""
命令行中的源目录和目标目录周围没有引号robocopy
。因为它们包含空格,所以它们被解释为参数分隔符;因此%source%
扩展为值C:\Program Files (x86)\Phoresis\Backup
,将被解释为三个参数C:\Program
,Files
和(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以克服这个问题;