我目前正在工作,只将文件夹从一个目录移动到一个文件夹。我创建的当前bacth文件如下。
Set /p target=Select Target Destination:
ForFiles /P "C:\Batch test" /D -4 /C "CMD /C if @ISDIR==TRUE echo Move @FILE %target%" &Move @File %target%
pause
我遇到的问题是使用目标目录,其中包含空格,例如" C:\ Move Test"。我想知道是否有办法将文件夹仍然移动到另一个名称中有空格的目录。
答案 0 :(得分:0)
您可以将双引号替换为十六进制等效值0x22:
ForFiles /P "C:\Batch test" /D -4 /C "CMD /C if @ISDIR==TRUE (echo Move @FILE 0x22%target%0x22 & Move @File 0x22%target%0x22)"
如果您遇到其他角色的问题,您也可以替换它们; 0x26 = &,0x28 = (,0x29 = )。
答案 1 :(得分:0)
你的命令行看起来很奇怪,有几个错误:
ForFiles /P "C:\Batch test" /D -4 /C "CMD /C if @ISDIR==TRUE echo Move @FILE %target%" &Move @File %target%
出了什么问题:
/D -4
,尽管/D -30
是正确的;请注意/D
检查上次修改日期,而不是检查创建日期!echo
命令前面有move
,因此显示move
命令而不是执行;为避免这种情况,只需删除echo
; move
之后有第二个forfiles
命令,因为它出现在forfiles /C
部分的右引号后面,并且在命令连接运算符后面&
;这完全超出了forfiles
的范围,因此对@file
进行了字面处理; &符号和孤立的move
命令需要删除; forfiles /C
之后的命令字符串中,因此您无法简单地使用""
,您需要将其转义; forfiles
中有两个选项:1。使用\"
和2.使用0x22
(根据forfiles /?
帮助,您可以按照其中的十六进制代码指定字符格式为0xHH
,代码0x22
代表"
个字符);我强烈建议使用选项2.因为在变体1中,仍然会出现"
个字符,这些字符可能会影响命令解释器cmd
,因为它不熟悉\"
转义(它的转义字符是^
); 因此,更正的命令行如下所示:
ForFiles /P "C:\Batch test" /D -30 /C "CMD /C if @ISDIR==TRUE Move @FILE 0x22%target%0x22"
为了完整起见,这就是选项1.的样子:
ForFiles /P "C:\Batch test" /D -30 /C "CMD /C if @ISDIR==TRUE Move @FILE \"%target%\""
请注意,您不需要在此引用源代码,因为@FILE
(与所有与路径相关的@
- 样式变量)会扩展为已引用的字符串。