我目前正在工作,只从一个目录到文件夹的文件夹。 我创build的当前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”。 我想知道是否有办法将文件夹移动到名称中有空格的另一个目录。
您可以用它们的十六进制等同于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 = ) 。
你的命令行看起来很奇怪,有几个错误:
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
检查最后修改日期 ,而不是创建日期! move
命令前有一个echo
,所以move
命令显示而不是执行; 为了避免这一点,只需删除echo
; forfiles
之后还有第二个move
命令,因为它出现在forfiles /C
部分的后面,而在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
(如所有与路径相关的@
样式变量)展开为已引用的字符串。