從一些網站下載的文件,文件名帶有廣告,典型的就是網站的名稱和域名,搞得文件名很長。在一些場景下,廣告看得見,真正的文件名卻被...了。在之前,我是遇到就手工去掉廣告,但一是麻煩,二是效率低。反正常常下載的就那麼幾個網站,須要一款小工具來自動化處理。
經常使用Windows,因此批處理是首選,並且更名這種是批處理的強項。
更名的命令: REN 舊名 新名
咱們須要由舊名算出新名。其實就是字符串替換。
替換的命令:SET 變量名2=%變量名1:舊串=新串%
就是把變量名1
中的所有的舊串
替換成新串
而後賦值給變量名2
,兩個也能夠是同一個變量。=
右邊直接跟%
就起到了移除
的做用。html
三下五除二,寫出了腳本:dom
@Echo Off for %%f in (*.*) do call :rn %%f goto :eof :rn set fn=%1 set fn=%fn:[網站名稱www.domain.com]=% set fn=%fn:.網站名稱.www.domain.com=% ren %1 %fn% goto :eof
它工做得很好,直到有一天遇到了問題,報錯信息:工具
系統找不到指定的文件。
緣由是遇到了一個文件名帶有&
的文件,進一步發現,文件名帶有空格,或者^
,都會出問題。
這個,不怕,我有法寶。重溫了一遍 解決DOS批處理中一個困擾我幾十個月的編碼問題 ,發現二者有區別。雖然都是DOS Shell的編碼問題,但上文解決的特殊字符是本身加進去的,加多少是心中有數的,而如今我遇到的特殊字符是文件名,有沒有特殊字符,有多少個是不肯定的。內心涼了半截。
我還有另外一個大法寶,就是作實驗,實踐出真知。
實驗過程比較枯燥,就不細說了。大概是造一些文件名,而後修改代碼,並打印許多中間變量值,不斷試錯。最終獲得一些肯定的,有用的結論。
實驗結論:網站
&|(空格)
等字符會由於被包的雙引號中而變成普通字符。Windows禁止|
看成文件(夾)名。^
或&
進行處理時,都看成普通字符就好。^^
替換回^
,就獲得正確的文件名。舊串
和新串
中如有^&|
等字符沒必要轉義,且沒必要把set的右邊整個包起來。如 set "p=abc.txt"最終的腳本:編碼
@Echo Off for %%f in (*.*) do call :rn "%%f" goto :eof :rn set fn=%1 set fn0=%fn:^^=^% set fn=%fn:^^=^% set fn=%fn:[網站名稱www.domain.com]=% set fn=%fn:.網站名稱.www.domain.com=% ren %fn0% %fn% goto :eof
世界又完美了。code