从一些网站下载的文件,文件名带有广告,典型的就是网站的名称和域名,搞得文件名很长。在一些场景下,广告看得见,真正的文件名却被...了。在之前,我是遇到就手工去掉广告,但一是麻烦,二是效率低。反正常常下载的就那么几个网站,须要一款小工具来自动化处理。
经常使用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