2016-10-12 72 views
-1

如何創建只從文件名中移除特定字符的批處理文件?是否可以在腳本中執行?我希望刪除這些符號:批量重命名文件以移除特定字符

({[}])+- 
+0

大多數時候,你所寫的內容無關,你真正想要的東西;我建議你刪除華夫餅乾,並簡單地問*「如何通過刪除集合中的單個字符批量重命名一組文件({[}])+ - '?」* – Clifford

回答

0

讓我爲您介紹Ruby,這是一種比M $替代Powershell更強大,更易於學習的腳本語言。窗口解釋器你可以在http://rubyinstaller.org/ 找到我可以給你一行代碼,但爲了清晰起見,這裏有一個4行程序,它可以滿足你的需求。

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

讓我解釋一下,Dir指令列舉使用通配符內用斜槓而不是反斜槓併爲每個文件時,它採取的基本部分生成new_name的路徑,在UNIX符號路徑(僅文件名),並使用正則表達式用第二個參數''(空字符串)替換(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(/[({\[}\])+-]/, '')))} 
0

在Windows CMD.EXE命令shell的重命名命令缺乏做你所需要的動力。可以使用帶正則表達式的-Replace運算符使用PowerShell Rename-Item命令完成此操作。

但是,運行PowerShell腳本受安全策略限制,因此它是not quite as straightforward作爲cmd批處理腳本。像Python這樣的腳本語言可能不太成問題。

+0

Ruby是Python的更簡單的路徑,當然,如果你只有批次 – peter

+0

@ peter的經驗:很可能如此;我只說「比如」 - 我對這兩種語言都沒有特別的瞭解 - 這只是一個例子。我個人會用C++做,因爲那是我最熟悉的語言,每天都會使用,所以速度會更快。快速工作的最佳語言通常是您已經知道的,或者您已經安裝工具的語言,而不一定是最適合該任務的語言。 – Clifford

+0

你是對的。但是,對於OP來說,這並不起作用,我越想越容易理解。 – peter

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