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

时间:2016-10-12 20:49:42

标签: windows batch-file rename batch-processing batch-rename

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

({[}])+-

3 个答案:

答案 0 :(得分:0)

Windows cmd.exe命令shell的重命名命令缺乏执行所需操作的能力。可以使用带有正则表达式的-Replace运算符使用PowerShell Rename-Item命令完成此操作。

但是,运行PowerShell脚本受安全策略的限制,因此它是not quite as straightforward作为cmd批处理脚本。像Python这样的脚本语言可能不那么成问题。

答案 1 :(得分:0)

让我向您介绍Ruby,这是一种比M $替代Powershell更强大,更容易学习的脚本语言。您可以在http://rubyinstaller.org/找到Windows解释器 我可以在一行中为您提供代码,但为了清楚起见,这里有一个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)/ [] /中的字符。如果您想了解更多信息,正则表达式是获取此类内容的方式,谷歌提供大量信息。 最后,我使用实用程序类File(是的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(/[({\[}\])+-]/, '')))}

答案 2 :(得分:0)

输出

 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!.*
)