如何创建仅从文件名中删除特定字符的批处理文件?是否可以在脚本中执行?我想删除这些符号:
({[}])+-
答案 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!.*
)