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