批量重命名文件以删除特定字符

Batch renaming files to remove specific characters

如何创建批处理文件,仅从文件名中删除特定字符?是否可以在脚本中执行?我想删除这些符号:

({[}])+-

Windows cmd.exe 命令 shell 的重命名命令无法执行您需要的操作。它可以通过 PowerShell Rename-Item 命令使用 -Replace 运算符和正则表达式来完成。

但是运行 PowerShell 脚本受安全策略限制,所以not quite as straightforward 作为cmd 批处理脚本。 Python 等脚本语言可能问题较少。

给大家介绍一下Ruby, a scripting language far more powerful and easier to learn than the M$ alternative Powershell. The windows interpreter you can find at http://rubyinstaller.org/ 我可以在一行中给你代码,但为了清楚起见,这里有一个 4 行程序可以满足你的需要。

Dir['c:/temp/*.package'].each do |file|
  new_name = File.basename(file.gsub(/[({\[}\])+-]/, ''))
  File.rename(file, new_name)
end

让我解释一下,Dir 命令枚举内部带有通配符的路径,使用斜杠而不是反斜杠的 unix 表示法,并且对于每个文件,它通过获取路径的基本名称(仅文件名)生成一个 new_name并使用正则表达式用第二个参数 ''(空字符串)替换 (gsub) /[]/ 中的字符。正则表达式是解决此类问题的方法,如果您想了解更多信息,请向 google 提供大量信息。 最后,我使用实用程序 class 文件(是的 Ruby 完全是面向对象的)将文件重命名为新名称。

你可以用任何语言做到这一点,但我敢打赌不像 Ruby 那样简洁和可读。安装 Ruby 解释器,将这些行保存在例如 cleanup.rb 中,将路径更改为您的路径并使用 ruby cleanup 启动它,或者如果您的扩展名已正确关联,则只需 cleanup 即可。

这重命名

c:\temp\na({[}])+-me.package 

c:\temp\name.package

作为奖励:这里是在当前文件夹中执行相同操作的单行版本。

Dir['*'].each {|f| File.rename(f, File.basename(f.gsub(/[({\[}\])+-]/, '')))}

输出

 C:\Users\User>(
 Set FName=test()[]{}+-
 Set FName=!Fname:(=!
 Set FName=!Fname:)=!
 Set FName=!Fname:{=!
 Set FName=!Fname:}=!
 Set FName=!Fname:[=!
 Set FName=!Fname:]=!
 Set FName=!Fname:+=!
 Set FName=!Fname:-=!
 Echo Ren test()[]{}+-.asc !Fname!.*
)
Ren test()[]{}+-.asc test.*

批处理文件

SetLocal EnableDelayedExpansion
for %%A in (*.asc) Do (
Set FName=%%~nA
Set FName=!Fname:^(=!
Set FName=!Fname:^)=!
Set FName=!Fname:{=!
Set FName=!Fname:}=!
Set FName=!Fname:[=!
Set FName=!Fname:]=!
Set FName=!Fname:+=!
Set FName=!Fname:-=!
Echo Ren %%A !Fname!.*
)