如何解决使用解析字符串重命名批处理脚本中的文件
我正在努力理解 Batch 上的所有命令,我遇到了一个问题。
Rimouski 04-01-2021.txt
Rimouski 05-01-2021.txt
Rimouski 06-01-2021.txt
Rimouski 07-01-2021.txt
Rimouski 08-01-2021.txt
我希望它们像这样重命名:
Rimouski 2021-01-04.txt
Rimouski 2021-01-05.txt
Rimouski 2021-01-06.txt
Rimouski 2021-01-07.txt
Rimouski 2021-01-08.txt
我基本上只是希望日期颠倒。
我不能改变原来的名字来删除空间,我必须用这个确切的名字来做。
我知道我可以通过以下方式浏览文件:
for /f %%a in ('dir /b "*.txt"') do ( )
我应该使用命令 Ren
,但这就是我所知道的。
我还想要一个可以“随处使用”和重复使用的解决方案。类似于解析字符串并按照我想要的顺序更改片段。
解决方法
阅读help for
,注意tokens
。还有 help set
,它允许您设置一个变量等于其输入的子字符串。所以你基本上想使用 for 循环来分割空格上的文件名,这是默认的分隔符,然后将第二个标记分成年、月、日变量,然后在重命名时将它们全部拼凑在一起。
所以第一步是让循环和文件搜索正常工作:
@for /f "tokens=1,2" %%I in ('dir /A-d /b "* ??-??-????.txt"') do @echo %%I %%J
这会在我的测试目录中产生以下内容:
> test
Rimouski 04-01-2021.txt
Rimouski 04-02-2021.txt
Rimouski 04-03-2021.txt
Rimouski 04-04-2021.txt
我在那里还有一些其他文件,所以我知道它的过滤效果很好。
现在解析并重新组合起来,加上一些脚本卫生:
@setlocal EnableExtensions
@set prompt=$G
@for /f "tokens=1,2,*" %%I in ('dir /A-d /b "* ??-??-????.txt"') do @call :DoIt "%%I" %%J %%K
@exit /b 0
:DoIt
@if "%~3" neq "" (@echo %1 does not match file filter. & exit /b 0)
@set "_prefix=%~1"
@set "_postfix=%~2"
@set "_dd=%_postfix:~0,2%"
@set "_mm=%_postfix:~3,2%"
@set "_yyyy=%_postfix:~6,4%"
@set "_ext=%_postfix:~10%"
@set "_newFileName=%_yyyy%-%_mm%-%_dd%%_ext%"
@echo ren "%_prefix% %_postfix%" "%_prefix% %_newFileName%"
@exit /b 0
您现在要做的就是从 @echo
行前面删除 @echo ren
,然后就可以开始了。但是首先要测试它,确保它没有尝试重命名您目录中的任何内容,它不应该重命名。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。