Windows批处理脚本从文件名删除括号中的文本?

我在一个文件夹中有一堆文件,我想通过一个.bat或.vbs脚本(或类似的)复制和重命名。 这些文件被命名为:

ABC-DE-(XXX)SomeNameHere.dat 

我想复制这些文件并重命名它们,删除(XXX)部分,只留下:

 ABC-DE-SomeNameHere.dat 

有一种类似的问题在这里回答,但我不能修改它为上述文件名模式工作,也只是重命名文件,不复制它们。

任何帮助深表感谢! 非常感谢。


编辑:张贴( 可怕的! )下面的代码。 可能最好忽略这个; _;

 @ECHO OFF FOR %%F IN ("ABC-DE-(*)*.dat") DO CALL :process "%%F" GOTO :EOF :process SET oldname=%1 SET "newname=%~nx1" SET "newname=%newname:*] =%" RENAME %oldname% "%newname%" 

Solutions Collecting From Web of "Windows批处理脚本从文件名删除括号中的文本?"

你对自己太难了。 你的代码比你想象的更接近。

 @ECHO OFF FOR %%F IN ("ABC-DE-(*)*.dat") DO CALL :process "%%F" GOTO :EOF :process SET oldname=%1 SET "newname=%~nx1" SET "newname=%newname:*)=ABC-DE-%" RENAME %oldname% "%newname%" 

以上可以缩短

 @ECHO OFF FOR %%F IN ("ABC-DE-(*)*.dat") DO CALL :process "%%F" GOTO :EOF :process SET "name=%~nx1" REN %1 "%name:*)=ABC-DE-%" 

您可以通过使用延迟扩展来消除对CALL的需要

 @ECHO OFF SETLOCAL EnableDelayedExpansion FOR %%F IN ("ABC-DE-(*)*.dat") do ( SET name=%%~nxF REN "%%F" "!name:*)=ABC-DE-!" ) 

上面的延迟扩展解决方案比使用CALL更有效,但如果文件名包含! 因为%% F扩展会被延迟扩展破坏。 这可以通过在循环中打开和关闭延迟扩展来解决。

 @ECHO OFF FOR %%F IN ("ABC-DE-(*)*.dat") do ( SET oldName=%%F SET newName=%%~nxF SETLOCAL EnableDelayedExpansion REN "!oldName!" "!newName:*)=ABC-DE-!" ENDLOCAL ) 

如果你的文件命名模式是一致的,你可以使用这个:

 for /f "tokens=1-3 delims=)(" %%a in ('dir /b') do @rename "%%a(%%b)%%c" "%%a-%%c"