|
需求:
只用cmd命令,將某目錄及其子目錄下所有文件都加上bak后綴。 分析: 1. “只用cmd命令”,意味著不能使用TC等工具; 2. “將某目錄及其子目錄下”,意味著要遍歷整個目錄,dir命令的/S選項,以及for命令的/R選項都有遍歷功能; 3. “所有文件”,意味著遍歷時不能包括目錄,dir /A:-D 可以排除目錄,只列出文件; 4. “加上bak后綴”,可以用ren或move命令。 實戰(zhàn)一:豪情萬丈 按照上面的分析,熟練點的很快能寫出: 代碼:
眨一眼就能看懂的可以跳過下面的段落,直接摁Alt + F4了-.- 不眨眼還看不大懂的不要著急,且聽我慢慢道來^o^(為了弄清楚來龍去脈,下面的解釋會夾雜原始英文釋義) 1. 先解釋 "dir /A:-D /S /B",dir(ectory)命令的作用是 引用:
/S(ubdirectories), 表示所有子目錄和子目錄下的文件也都要顯示。 /B(are), 表示顯示最簡單赤裸的信息就可以了,其它冗余信息都不顯示。對于dir命令來說,就是只顯示長文件名。 好了,說了這么多,其實很簡單,dir /A:-D /S /B 的作用就是顯示某目錄及其子目錄下的所有文件列表??梢源蜷_CMD窗口,親身體驗一下(注意別在C盤根目錄用這個命令呵,文件太多,會刷半天屏的。若不幸使用,請使勁摁Ctrl + C退出) 2. 來看看 move 和 ren(name) 命令. cmd窗口輸入move /?,一清二楚: 引用:
ren(ame)命令更簡潔: 引用:
值得提的一點是,cmd下的大部分命令都支持通配符的,因此要給某目錄下的文件加bak后綴,只要ren *.* *.*.bak就可以了,如果ren支持/S(ubdirectories),那么 ren /S *.* *.*.bak 就能解決最開始那個問題,可恨的是rename太簡潔了,不支持任何選項-.- 3. 接著我們來看看 for /F %i in (‘command‘). 用cmd的大都聽過這樣一句武林秘籍:學(xué)會for,cmd就無敵了。for是cmd命令中的九陰真經(jīng),此言絕不虛傳。我們一起來看看這本威力無窮的經(jīng)書吧: 代碼:
引用:
for的基本用法是: 引用:
FOR /D %variable IN (set) DO command [command-parameters] /D 中的D是Directory, 表示只匹配目錄。 FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters] /R 中的R是Recursive, 表示遞歸遍歷,在這里就是遍歷所有子目錄。 利用/R遍歷選項,對于頂樓問題,我們還可以得到下面這個解決方案: 代碼:
FOR /L %variable IN (start,step,end) DO command [command-parameters] /L 中的L我找了半天也無法確定是哪個單詞,很可能是List。/L的含義倒是很清楚,經(jīng)書一點都不含糊。 FOR /F ["options"] %variable IN (set) DO command [command-parameters] /F中的F是File,這是用得最多的也是最復(fù)雜同時最有用的一招,經(jīng)書的解釋也很詳細(xì)了,我想來想去,沒想到值得補充的,想說一點的是,/F(ile)和file-set中的File是廣義的,for不僅僅用于文件集,所有字符串集其實都可以用for處理。此外,/F選項加上后,(set)可以是普通的file-set,還可以是"string" or ‘command‘;如果options中有usebackq,(set)中的表示又略有不同。 其它詳細(xì)解釋,就不多說了,所謂師傅領(lǐng)進(jìn)門(自詡為師傅,汗一個先,hitme師爺別生氣)..... 好,九陰真經(jīng)閱讀完畢,回到我們要討論的問題。 來看看 for /F in %i (‘dir /A:-D /S /B‘) do move %i %i.bak 就很容易懂了,‘dir /A:-D /S /B‘是命令,得到所有文件列表,for 用來遍歷,對于列表中的每一行,存儲到 %i 變量,然后執(zhí)行 move %i %i.bak 重命名,大功告成。 小結(jié): 1. 在實戰(zhàn)一中,我們學(xué)會了dir、move、rename、for四個命令。 2. 對于頂樓的問題,我們得到了兩個解決方案: 方案一: 代碼:
方案二: 代碼:
實戰(zhàn)二:莫撞墻 高高興興的把上面的解決方案交給了老板(不僅提供了,而且提供了兩個,老板總該滿意了吧),誰料屋不漏卻遭連環(huán)雷,舒舒服服的決定逛會CCF和DRL水區(qū)之時,電話鈴聲大作,老板發(fā)火了:“搞什么搞,兩個命令運行了,文件后綴一個也沒加上,糊弄我是吧,不趕快搞定扣你績效......” 暈啊,汗都來了,什么破老板,是不是不會開cmd窗口?上面的命令怎么會有錯呢?萬般無奈,遠(yuǎn)程協(xié)助老板,不運行不知道,一運行也不嚇一跳: 引用:
汗啊,寒窗二十余年,苦練九陰神功,最后居然敗在死背四淫賊手上,數(shù)千年祖輩留下來的光榮顏面就此毀于一旦,地面無縫我想鑿啊,天堂無路我欲飛...... 汗流浹背之時,快速搞定: 方案一修正版: 代碼:
方案二修正版: 代碼:
小結(jié):死背四(Space)淫賊無處不在,一定要小心小心又小心。 既是總結(jié)也是前言:做而后思之,可以為師矣 喜歡折騰Windows系統(tǒng)的,或多或少都接觸過dos命令。雖然已經(jīng)有很多強大易用的GUI程序,但我始終相信,dos命令以其簡潔豐富、靈活多高效的特性將會永遠(yuǎn)存在而且一直被人使用。 cmd命令是dos命令中的基石,如果有精力,我會一并介紹其他dos下常用的命令行小工具,包括for win32版的ls、grep等。這些小工具強大的生命力,時常讓我感到驚訝。 打算寫的這個實戰(zhàn)系列,對自己來說是一個鞏固提高的過程,同時很希望這些文章能對大伙的實際工作有所幫助,哪怕能節(jié)約你那么一點點時間,那也是我的愿望。 做而后思之,可以為師矣。我相信任何一個人,只要愿意在具體操作之后,去追尋思考為什么,就都可以成為CMD專家。希望我的這篇文章能拋磚引玉^o^ 最后很感謝CMD王子hitme以及集百長于一身的高人asap, 從你們的文章以及回復(fù)中,受益匪淺 ^o^ |
|
|