批量使用FORFILES移动30天前的文件夹

时间:2016-09-15 20:40:42

标签: windows batch-file command-line directory move

我目前正在工作,只将文件夹从一个目录移动到一个文件夹。我创建的当前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"。我想知道是否有办法将文件夹仍然移动到另一个名称中有空格的目录。

2 个答案:

答案 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%

出了什么问题:

  • 您说的是30天,但您指定了/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(与所有与路径相关的@ - 样式变量)会扩展为已引用的字符串。