批量重命名多个文件?

时间:2015-03-07 21:00:55

标签: batch-file

类似的问题已经有很多时间,但是,对于我想要的东西,它是不同的东西。我试过搜索,但不是我想要的。

现在我的文件夹(隐藏文件)中有某些(.txt)文件,其中存储了某些文本文件(多个文本文件),其中包含特殊字符(%!= ^“; @%.. iec)我想删除这些特殊字符,并在重命名循环中用( - )替换它们,以便重命名文件。

代码(从这里得到它)编辑我的用途,但它没有用。

for /f "delims=" %%a in ('dir "%~dp0hidden-files\*.txt"') do (set "newname=%~nx1"
set "newname=%newname:!=-%"
set "newname=%newname:_=-%" 
set "newname=%newname:==-%"
set "newname=%newname:%=-%"
echo ren "%%a" "!newname!")

非常感谢任何帮助。欢呼声。

1 个答案:

答案 0 :(得分:1)

您的代码存在许多问题。我太累了,无法全部列出,但是有一个问题用纯批处理很难解决 - 没有简单的方法用批处理替换字符串中的=字面值。实现此目的的最简单(也许是最有效)的方法是逐个字符地查找=并通过子字符串操作替换它。

还有许多其他问题需要先进的批处理技术来解决。

我有一个更简单的解决方案 - 我的JREN.BAT utility使用正则表达式替换来重命名文件。它是一个混合的JScript /批处理脚本,可以在XP以后的任何Windows机器上本机运行。使用命令行中的jren /?访问内置帮助。您可能希望使用
jren /? | more一次查看一个屏幕。我从不使用MORE,因为我的控制台配置了一个大缓冲区,让我向上滚动以查看过去的输出。

一旦你的机器上有JREN.BAT,最好是在你的PATH变量中的文件夹中,那么你只需要重命名当前目录中的文件 - 不需要额外的批处理脚本:

jren "[!_=%]" "-" /fm *.txt

如果需要,您可以将文件夹指定为选项:

jren "[!_=%]" "-" /fm *.txt /p "c:\YourPathHere"

如果您将命令放在另一个批处理脚本中,那么您将需要使用CALL JREN,并且需要将百分比双重转义为%%%%。必须在批处理文件中将百分比文字转义为%%,并且CALL需要额外的一轮转义:

@echo off
call jren "[!_=%%%%]" "-" /fm *.txt /p "%~dp0hidden-files"

更新以回复评论

()[]添加到要替换的字符列表中很简单。唯一的诀窍是,当]出现在字符集\]中时,您必须将[....]转义为@echo off call jren "[!_=%%%%[\]()]" "-" /fm *.txt /p "%~dp0hidden-files"

]

另一种选择是在开幕[之后立即放置@echo off call jren "[]!_=%%%%[()]" "-" /fm *.txt /p "%~dp0hidden-files"

jren /?regex

正则表达式非常强大,但它们可能会让那些没有经验的人感到困惑。使用/t访问Microsoft的所有支持的正则表达式语法的帮助页面。互联网上有大量的教程,以及允许您方便地测试正则表达式的网站。

如果您正在开发JREN命令,我建议您首先使用*选项对其进行测试,而不实际重命名任何内容。

评论中问题的最新更新

文件名不能包含?|<>\/:,{ {1}}或",因此您不必担心这些角色。我不确定你做了什么,但我没有看到附上的[...]代表一个字符集。以下应该可以正常工作:

call jren "[`~!@#$%%%%^&_ +=,';}{[\]()]" "-" /fm *.txt /p "%~dp0hidden-files"