从文件名中批量删除括号
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 命令仅用于测试目的ECHO
ed。 验证命令正确后,将ECHO(REN
更改为REN
以实际重命名文件。
【讨论】:
以上是关于从文件名中批量删除括号的主要内容,如果未能解决你的问题,请参考以下文章