使用批处理命令解析文件夹名称并重命名文件夹

时间:2016-12-11 19:15:39

标签: parsing batch-file cmd rename

我正在尝试重命名大量具有日期名称的文件夹。我创建了一个只包含两个这样的文件夹的测试文件夹。他们的名字是

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此时出人意料。

如何通过此错误?感谢。

1 个答案:

答案 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%"
  • for / f解析从Dir传递并由findstr regex过滤的行
  • tokens=1-3 Delims=-表示该行分为3个部分,分为-,分配for vars %% A - %% C
  • 在sub中,这些作为参数%1 - %3
  • 被接收
  • Set /A每月添加100个
  • %mm:~-2%仅取最后两个位置,如果小于10
  • 则给出前导零

Aschipls的评论是对的,上面修改过的版本应该可行