windows - 在某些条件下批量重命名
问题描述
经过大量搜索后,我不完全确定如何进一步解决这个问题,所以我想知道是否有人可以提供帮助?我正在编写一个批处理重命名器,它查看如下所示的文件:
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 并且我似乎无法通过尝试过滤它来使其工作。
理想的解决方案是查找哪些文件具有Declicked 扩展名,并且仅通过 %%d %%e 和 %%e_%%f 行而不是其余的行运行这些文件。
希望这有任何意义!
解决方案
这有效:
@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
行并仔细查看执行的代码。有关进一步的说明,请参阅此线程。
推荐阅读
- python - 在 Django 中按类别过滤产品
- c# - 如何从路由中删除“api”-Azure Functions v3 -- host.json routePrefix 空字符串不起作用
- android - recyclerview变空后如何设置视图的可见性
- path - 关闭路径后,我放入路径中的所有内容都会被删除
- python - 将字典项与列表中的字符串连接起来
- php - 仅当您登录时才显示名称 - laravel
- linux - 在 bash 中每 100ns 轮询一次
- proxy - esp8266 客户端连接失败,使用 cdn 代理
- javascript - getElementById 没有得到正确的元素?
- android - Moshi 和 Retrofit 无法解析简单的 JSON