Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 在某些条件下批量重命名_Windows_Batch File_Cmd_Renaming - Fatal编程技术网

Windows 在某些条件下批量重命名

Windows 在某些条件下批量重命名,windows,batch-file,cmd,renaming,Windows,Batch File,Cmd,Renaming,在进行了大量搜索之后,我不完全确定如何进一步处理这个问题,所以我想知道是否有人可以帮忙?我正在编写一个批处理重命名器,用于查看如下所示的文件: Name_Project_Date_CharacterName.wav Name_Project_Date_CharacterName_Declicked.wav Name_Project_Project2_Date_CharacterName.wav Name_Project_Project2_Date_CharacterName_Declicked.

在进行了大量搜索之后,我不完全确定如何进一步处理这个问题,所以我想知道是否有人可以帮忙?我正在编写一个批处理重命名器,用于查看如下所示的文件:

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\u Project\u Project2\u Date\u CharacterName.wav的文件,它将称之为Date\u CharacterName.wav,因为脚本没有专门查找_Declicked,我似乎无法通过尝试过滤它来让它工作

理想的解决方案是找到哪些文件的扩展名已取消,只通过%%d%%e和%%e_uf%%行运行这些文件,而不通过其余文件

希望这一切都有意义

这是有效的:

@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离线并仔细检查执行的代码。有关进一步的解释,请参阅。

…在'dir/b%dirname%\*.'u declicked.'do…?只是一个简单的说明-如何使它在批处理所在文件夹的所有子目录上运行?再次感谢大家,经过多次尝试,我仍然无法让这个脚本也适用于所有子目录,有什么我遗漏的吗?一直在使用/s,但即使在引用其他脚本后,在任何时候都没有用。再次感谢如果您按照建议按dir/B/S*.wav更改dir/B,并按set original=%~NX1更改set original=%~1以消除新路径,那么这应该适用于所有子目录。。。