从文件名中批量删除括号

Posted

技术标签:

【中文标题】从文件名中批量删除括号【英文标题】:Batch remove parenthesis from file name 【发布时间】:2014-07-06 02:17:30 【问题描述】:

成功删除一堆 Google Drive 文件夹重复后,一些文件保留了“filename(2)”名称。

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

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

【问题讨论】:

我以前做过这个,当时我在测试'owncloud',但是,因为你不能使用带括号的for循环,这很痛苦。正如 PA 上面问的,到目前为止,您尝试过什么? 【参考方案1】:

试试这样:

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

@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" 它只适用于第一个。如果您遇到这种情况,您必须在文件末尾添加一个计数器以确保它们将被重命名。

【讨论】:

原谅我的无知。你如何运行这段代码?我试图通过 CMD 运行它,但没有结果。我编码经验不足。 请在您的答案中提供代码的解释,这将有助于未来的读者。 非常感谢您的帮助! 老肿块,对不起,但是如何处理“我的文件(1).jpg”的情况下删除前面的空格以防止扩展名前面的空格? 用字符串替换:set "file=My File(1).jpg" 然后set "file=%file: =%"【参考方案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"

【讨论】:

有没有办法将它也实现到子文件夹中?谢谢! 太棒了!谢谢一堆。显示结果的方式非常优雅☺ 如果您的 Dropbox 链接消失,这里是 repl.bat 脚本的官方线程,供将来偶然发现的任何人使用:dostips.com/forum/viewtopic.php?f=3&t=3855::: @GabrielMeono SO 也有官方帖子***.com/questions/60034/…【参考方案3】:
@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 命令仅用于测试目的ECHOed。 验证命令正确后,将ECHO(REN 更改为REN 以实际重命名文件。

【讨论】:

以上是关于从文件名中批量删除括号的主要内容,如果未能解决你的问题,请参考以下文章

如何批量删除excel表格中数字前后的方括号

在word中去掉所有括号中的不同内容,有简单方法吗

如何从文件名中删除空格(批量)

如何从谷歌云存储中批量删除文件? (Node.js)

使用服务帐户从 Azure Blob 存储中批量删除文件

如何在LINUX服务器上批量删除文件?