我正在尝试重命名大量具有日期名称的文件夹。我创建了一个只包含两个这样的文件夹的测试文件夹。他们的名字是
2014年1月23日
2016年10月1日
我想将它们重命名为
2014年1月23日
2016年10月1日
在以管理员身份运行的命令窗口中(可能没有必要)我输入了这些命令。
C:\Users\Harry\Documents\Test Batch Job>dir
Volume in drive C is Windows
Volume Serial Number is 30C3-D653
Directory of C:\Users\Harry\Documents\Test Batch Job
12/11/2016 01:52 PM <DIR> .
12/11/2016 01:52 PM <DIR> ..
11/27/2016 10:33 PM <DIR> 1-23-2014
11/27/2016 10:33 PM <DIR> 10-1-2016
0 File(s) 0 bytes
4 Dir(s) 309,874,257,920 bytes free
C:\Users\Harry\Documents\Test Batch Job>for /f "tokens=1,2,3 delims=-" %%A in ("%~dp0") do rename %%A-%%B-%%C %%C-%%A-%%B
%%A was unexpected at this time.
C:\Users\Harry\Documents\Test Batch Job>
我知道我没有用这个命令处理丢失的前导零 - 我会在这个命令工作后处理它。
我收到错误消息
%% A此时出人意料。
如何通过此错误?感谢。
答案 0 :(得分:2)
如果批处理的输出看起来正确,请删除最后一行中的echo
。
@Echo off&SetLocal EnableExtensions EnableDelayedExpansion
Set Base=C:\Users\Harry\Documents\Test Batch Job
pushd %Base%
For /f "tokens=1-3 delims=-" %%A in (
'Dir /B/AD *-*-* ^|findstr "^[0-9][0-9]*-[0-9][0-9]*-[0-2][0-9][0-9][0-9]$"'
) Do call :Sub %%A %%B %%C
popd
goto :Eof
:Sub month day year
If %1 gtr 12 Goto :Eof
Set /A "yy=%3,mm=%1+100, dd=%2+100"
Echo Rename "%1-%2-%3" "%yy%-%mm:~-2%-%dd:~-2%"
Dir
传递并由findstr regex过滤的行tokens=1-3 Delims=-
表示该行分为3个部分,分为-
,分配for vars %% A - %% C Set /A
每月添加100个%mm:~-2%
仅取最后两个位置,如果小于10 Aschipls的评论是对的,上面修改过的版本应该可行