类似的问题已经有很多时间,但是,对于我想要的东西,它是不同的东西。我试过搜索,但不是我想要的。
现在我的文件夹(隐藏文件)中有某些(.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!")
非常感谢任何帮助。欢呼声。
答案 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"