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