批量重命名具有不同文本位置的文件

Rename file with different text position in batch

我正在尝试重命名具有不同文本位置的文本文件。

示例:

20170811191008_marie.txt --> marie_txt_20170811191008

我有一个非常基本的重命名批处理命令来循环重命名文件,但我正在尝试找出如何更改文本在文件名中的位置。

命令:

for /f "delims=" %%i in ('dir /b /a-d *.txt') do ren "%%~i" "%%~ni txt%%~xi"

如你所愿

for /f "tokens=1* delims=_" %%i in (
    'dir /b /a-d *_*.txt ^|findstr /i "^20[0-9]*_.*\.txt$"'
) do echo ren "%%i_%%j" "%%~nj_txt_%%i"

> SO_45673483.cmd
ren "20170811191008_marie.txt" "marie_txt_20170811191008"

编辑 忘了提到删除 ren 前面的 echo 以真正执行重命名,一旦你确定它确实需要你想要的。

对于多个文件扩展名,您总是可以使用这样的东西:

@Echo Off
SetLocal EnableDelayedExpansion
For /F "EOL=_ Tokens=1* Delims=_" %%A In ('Where .:??????????????_*.*') Do (
    Set "fx=%%~xB"
    Ren "%%A_%%B" "%%~nB_!fx:~1!_%%A" 2>Nul)

您当然仍然可以指定 .txt 而不是 .*,但是不需要将 _txt_ 硬编码到它后面的代码中。