在某些条件下批量重命名

Batch renaming in certain criteria

经过大量搜索后,我不确定如何进一步解决这个问题,所以我想知道是否有人可以提供帮助?我正在编写一个批量重命名器,它查看如下所示的文件:

Name_Project_Date_CharacterName.wav
Name_Project_Date_CharacterName_Declicked.wav
Name_Project_Project2_Date_CharacterName.wav
Name_Project_Project2_Date_CharacterName_Declicked.wav

我需要将这些重命名为:

CharacterName.wav
CharacterName_Declicked.wav

这是我目前拥有的:

set dirname="%cd%"

for /f "tokens=1,2,3,4,5 delims=_" %%a in ('dir /b %dirname%') do rename %dirname%\%%a_%%b_%%c_%%d %%d

for /f "tokens=1,2,3,4,5 delims=_" %%a in ('dir /b %dirname%') do rename %dirname%\%%a_%%b_%%c_%%d_%%e %%d_%%e

for /f "tokens=1,2,3,4,5,6 delims=_" %%a in ('dir /b %dirname%') do rename %dirname%\%%a_%%b_%%c_%%d_%%e %%e

for /f "tokens=1,2,3,4,5,6 delims=_" %%a in ('dir /b %dirname%') do rename %dirname%\%%a_%%b_%%c_%%d_%%e_%%f %%e_%%f

这里的问题是,如果我们有一个名为 Name_Project_Project2_Date_CharacterName.wav 的文件,它将调用它 Date_CharacterName.wav 因为脚本不是专门寻找 _Declicked 的,我似乎无法通过尝试过滤它来让它工作。

理想的解决方案是通过 %%d%%e 和 %%e_%%f 查找哪些文件具有 Declicked 扩展名,并且仅 运行 那些文件行而不是其余部分。

希望这一切有意义!

这个有效:

@echo off
setlocal EnableDelayedExpansion

for /F %%a in ('dir /B') do call :Rename "%%a"
goto :EOF

:Rename original
set "original=%~1"
set "last=%original:_=" & set "lastButOne=!last!" & set "last=%"
if "%last%" equ "Declicked.wav" (
   ren "%~1" "%lastButOne%_%last%"
) else (
   ren "%~1" "%last%"
)
exit /B

如果您想了解该方法的工作原理,请删除 @echo off 行并仔细查看执行的代码。进一步的解释,见this thread.