【问题标题】:Rename files in Batch script using parse string使用解析字符串重命名批处理脚本中的文件
【发布时间】:2021-06-17 06:57:40
【问题描述】:

我很难理解 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,但这就是我所知道的。

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

【问题讨论】:

    标签: windows batch-file rename file-rename


    【解决方案1】:

    阅读help for,关注tokens。同样help set,它允许您将变量设置为等于其输入的子字符串。所以你基本上想使用for循环来分割空间上的文件名,这是默认分隔符,然后将第二个标记分成Year,Month,Day变量,然后在重命名中将它们全部拼凑在一起。

    所以第一步是让循环和文件搜索正常工作:

    @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,然后就可以开始了。但首先对其进行测试,确保它没有尝试重命名您目录中的任何内容,它不应该重命名。

    【讨论】:

    • 谢谢!虽然快速 cmets,但我在“ren”函数上遇到了语法错误。我不得不删除两个部分之间的“to”。所以:ren "%_prefix% %_postfix%" "%_prefix% %_newFileName%"
    • 我的错。我最初只是让它显示它会做什么。
    猜你喜欢
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多