Windows 使用解析字符串重命名批处理脚本中的文件

Windows 使用解析字符串重命名批处理脚本中的文件,windows,batch-file,rename,file-rename,Windows,Batch File,Rename,File Rename,我正在努力理解批处理中的所有命令,我面临一个问题 我有这样的文件: 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 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
我想让他们改名如下:

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
,但我只知道这些


我还想要一个解决方案,我可以使用和重用“无处不在”。类似于解析字符串并按我想要的顺序更改片段。

阅读
帮助,了解
,注意
标记。同样
帮助设置
,它允许您将变量设置为其输入的子字符串。因此,您基本上希望使用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-ren
行前面删除
@echo
,然后您就可以开始了。但首先要测试它,确保它没有试图重命名目录中的任何内容,它不应该重命名。

谢谢!不过,我在“ren”函数上遇到了一个语法错误。我不得不去掉这两部分之间的“to”。所以:ren“%\u prefix%%\u postfix%”“%\u prefix%%\u newFileName%”我的坏。我最初只是让它显示它会做什么。