我在文件夹中有大量的.zip文件,如果它在名称中满足某个条件,我想移动到我创建的新文件夹中。比如,如果它在文件名中有日期,我想将其移动到文件夹中。 cd C:\ Users \ eyousea \ Documents \ Test
set today=%date:~10,13%%date:~4,2%%date:~7,2%
md %today%
for %%a in (*.zip) do(
set fileday=%%a:~1,8%
if %today% = %fileday% (
move %%a "C:\Users\eyousea\Documents\Test\%today%"
pause
我不确定是什么错。我怎么能做到这一点?
答案 0 :(得分:1)
使用echo on
和echo AProblematicCommand
(例如echo set fileday=%%a:~1,8%
)来调试批处理文件!
解析括号中关闭的块,并立即展开%
。因此fileday
中使用的if
值在for
循环开始之前包含其值 - 可能未定义!
您需要启用delayed expansion并使用!
标记使用位置。
您必须在do
和(
之间留出空格。
%a
(或%%a
中的for
)等参数不能用于变量扩展。您必须将其分配给临时变量并展开它。
您可以在批处理文件中使用缩进,只是为了便于阅读。例如,它有助于找到未闭合的括号。我在代码段中看不到任何)
。
总结:
set today=%date:~10,13%%date:~4,2%%date:~7,2%
md %today%
setlocal EnableDelayedExpansion
for %%a in (*.zip) do (
set filename=%%a
set fileday=!filename:~1,8!
if %today% == !fileday! (
move %%a "C:\Users\eyousea\Documents\Test\%today%"
)
)