批量重命名具有不同文本位置的文件
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_
硬编码到它后面的代码中。
我正在尝试重命名具有不同文本位置的文本文件。
示例:
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_
硬编码到它后面的代码中。