批量从文件名中删除括号

时间:2014-05-17 19:44:36

标签: windows batch-file cmd rename batch-processing

成功移除一堆Google Drive Folder副本后,某些文件会保留"文件名(2)"名称。

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

包括文件夹和子文件夹。

3 个答案:

答案 0 :(得分:3)

试试这样:

使用下面的代码创建一个文件test.bat,并在var $path

中替换test中的路径
@echo off 
set $path="C:\Users\CN Micros\Desktop\PROGRAMMATION\test"
for /f "tokens=1-3 delims=^(^)" %%a in ('dir /b/a-d %$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" 它只适用于第一个。如果你有这种情况,你必须在文件末尾添加一个计数器,以确保它们将被重命名。

答案 1 :(得分:2)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
FOR /f "delims=" %%a IN (
  'dir /b /s /a-d "%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在您确认命令正确后,将ECHO(REN更改为REN以实际重命名文件。

答案 2 :(得分:2)

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

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

这使用名为repl.bat的帮助程序批处理文件 - 从https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

下载

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

编辑:此版本将通过子目录进行递归:

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