批量从文件名中删除括号

成功移除一堆Google云端硬盘文件夹副本后,某些文件保留“文件名(2)”的名称。

有没有办法批量重命名每个文件,所以圆括号和括号内的数字已经消失?

这包括文件夹和子文件夹。

这将创建renfiles.bat.txt供您在记事本中检查,然后重命名为.bat并执行,如果您满意的话。

 @echo off dir /b /ad *(*).* |find /i /v "%~nx0" |find /i /v "repl.bat" |repl "(.*)\(.*\)(\..*)" "ren \q$&\q \q$1$2\q" xa >"renfiles.bat.txt" 

这使用一个称为repl.bat的帮助程序批处理文件 – 从以下网址下载: https : repl.bat

repl.bat放在与批处理文件相同的文件夹中或位于路径上的文件夹中。

编辑:这个版本将递归通过子目录:

 @echo off dir /b /s /ad *(*).* |find /i /v "%~nx0" |find /i /v "repl.bat" |repl ".*\\(.*)\(.*\)(\..*)" "ren \q$&\q \q$1$2\q" xa >"renfiles.bat.txt" 

尝试像这样:

用下面的代码创建一个文件test.bat,并替换var $path要测试的$path

 @echo off set $path="C:\Users\CN Micros\Desktop\PROGRAMMATION\test" for /f "tokens=1-3 delims=^(^)" %%a in ('dir /b/ad %$path%') do ( if exist %$path%\"%%a(%%b)%%c" echo ren %$path%\"%%a(%%b)%%c" "%%a%%c" ) pause 

然后在CMD中运行或双击。 如果输出正确,则删除echo

程序创建3个令牌: %%a =(), %%b之前的内容()和( %%c )之后的内容是什么()。

然后,我们安排这3个令牌来重命名没有()的文件。

如果你有一些文件的名字相同,比如: "file(1)name""file(2)name" – > "filename"它只能和第一个"filename"工作。 如果你有这种情况,你必须在文件末尾添加一个计数器,以确保它们将被重命名。

 @ECHO OFF SETLOCAL SET "sourcedir=U:\sourcedir" FOR /f "delims=" %%a IN ( 'dir /b /s /ad "%sourcedir%\*" ' ) DO ( SET "name=%%~na" SETLOCAL ENABLEDELAYEDEXPANSION SET "newname=!name:)=!" SET "newname=!newname:(=!" IF "!name!" neq "!newname!" ( IF EXIST "%%~dpa!newname!%%~xa" (ECHO cannot RENAME %%a ) ELSE (ECHO(REN "%%a" "!newname!%%~xa") ) endlocal ) GOTO :EOF 

你需要将你需要的目录设置为sourcedir 。 我使用了适合我测试的u:\sourcedir

所需的REN命令仅用于测试目的。 在确认命令正确后 ,将ECHO(REN改为REN重新命名文件。