【问题标题】:Batch renaming files to remove specific characters批量重命名文件以删除特定字符
【发布时间】:2017-02-21 19:35:59
【问题描述】:

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

({[}])+-

【问题讨论】:

  • 您写的大部分内容与您真正想要的内容无关;我建议您删除华夫饼并简单地问“如何通过删除集合({[}])+-中的单个字符来批量重命名一组文件?”

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


【解决方案1】:

输出

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

【讨论】:

    【解决方案2】:

    让我向您介绍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(/[({\[}\])+-]/, '')))}
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • Ruby 是比 Python 更简单的方法,当然如果你只有批处理经验
      • @peter :很可能是这样;我只说“比如”——我对这两种语言都不太了解——这只是一个例子。我个人会用 C++ 来做这件事,因为那是我最了解并且每天都在使用的语言,所以它会更快。快速工作的最佳语言通常是您已经知道的语言,或者您已为其安装工具的语言,而不一定是最适合该任务的语言。
      • 你说的太对了。但这在 OP 的情况下不起作用,我认为越容易理解越好。
      猜你喜欢
      • 1970-01-01
      • 2020-05-26
      • 2013-12-09
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 2018-06-29
      • 1970-01-01
      • 2020-08-30
      相关资源
      最近更新 更多