1. 程式人生 > >windows命令列中巧妙使用for命令

windows命令列中巧妙使用for命令

參考:http://www.it.com.cn/f/edu/047/5/7703.htm

在命令提示符後鍵入“For /?”來獲得具體幫助,中文的,很棒!

基本格式FOR %variableIN (set)DO command [command-parameters]  ------------------->注意IN後面有空格

  %variable  指定一個單一字母可替換的引數。
  (set)      指定一個或一組檔案。可以使用萬用字元。
  command    指定對每個檔案執行的命令。
    
在批處理程式中使用 FOR 命令時,指定變數請使用 %%variable 而不要用 %variable。

命令擴充套件:



FOR /D %variable IN (set) DO command [command-parameters]
    如果集中包含萬用字元,則指定與目錄名匹配,而不與檔名匹配。

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
    檢查以 [drive:]path 為根的目錄樹,指向每個目錄中的 FOR 語句。
    如果在 /R 後沒有指定目錄規範,則使用當前目錄。如果集僅為一個單點(.)字元,    則列舉該目錄樹。

FOR /L %variable IN (start,step,end) DO command [command-parameters]
    該集表示以增量形式從開始到結束的一個數字序列。因此,(5,-1,1)將產生序列(5 4 3 2 1)
:for /L %i in (1,1,4) do ren tmp%i.txt out%i.txt

更多用法請在命令提示符後鍵入“For /?”來獲得具體幫助。下面我們將直接講述For命令的具體用法。

  1. 給文字檔案批量加上落款 

  我們可以一次性地給所有檔案新增上落款,假如我們要給放在“ABCDE”目錄下的所有文字檔案加上落款。那麼就請先建一個名為Address.txt的文字檔案,錄入通訊地址、QQ、E-mail等等資訊,儲存到E盤的根目錄。 

  再新建一個文字檔案,錄入以下內容: 
  MD E:\TEMPabcde   for /r E:\ABCDE %%I in (*.txt) do copy %%I+E:\address.txt E:\tempABCDE\   for /r E:\tempABCDE %%I in (*.txt) do copy %%I E:\ABCDE\ 
  echo y|del E:\TEMPabcde   echo y|rd E:\TEMPabcde   錄入完畢,經檢查確認無誤後,另存為“給檔案加落款.bat”,也儲存到E盤的根目錄。現在,只需雙擊此批處理檔案,就可以為E:\ABCDE資料夾中所有的TXT檔案加上落款。   提示:For命令指定引數“%I”從“E:\ABCDE”資料夾中的所有文字檔案中取值 ;“/r”引數表示包括子目錄。 

  2. 批量獲取檔案列表 

  如果我們需要製作某個目錄下的檔案清單,如電影檔案的檔案清單,可以用For命令來輕鬆完成。我們以製作F盤上的所有RM格式的電影檔案的清單為例:   先在F盤根目錄下建一個名為“列檔案清單.bat”的文字檔案,然後輸入以下內容並儲存:   For /r F:\ %%i in (*.rm) DO @echo %%~fi >>F:\RMList.txt   雙擊此批處理檔案,即可快速列出F盤上所有的以RM為副檔名的電影檔案的清單。   提示:For命令指定引數“%i”從F盤的所有以RM為副檔名的檔案中取值;“@echo %%fi”表示將所有的RM檔案及其完整路徑顯示出來;“>>F\RMList.txt”表示將輸出結果重定向到F\RMList.txt檔案中,開啟該檔案,即可看到詳細的目錄清單;“f”表示完整路徑。還可以使用“%n”(檔名)、“%x”(副檔名)、“%d”(驅動器)、“%p”(路徑)、“%s”(完整路徑)、“%t”(檔案日期)、“%z”(檔案大小)等引數。 

  3. 快速刪除磁碟上的空資料夾 

  假設我們要清理D盤上的空資料夾,那麼請先用記事本建一個名為“kill.bat”的檔案,在該檔案中輸入以下內容:   dir d:\ /ad /b /s |sort /r >>d:\kill.txt   For /f %%i in (d:\kill.txt) DO rd %%i   echo y |del d:\kill.txt   先查詢並刪除全部“Thumbs.db”檔案,然後雙擊該檔案,D盤上所有的空資料夾很快就消失的無影無蹤了。   提示:“dir d:\”表示列D盤上的所有目錄包括子目錄列表,其中引數“/ad”表示列所有目錄;引數“/b”表示只列出資料夾名稱而不顯示標題資訊或摘要:引數“/s”表示搜尋,即查詢D盤中的所有資料夾和子資料夾;“|”是管道符號,將Dir命令的結果傳遞給“sort”命令;“sort”命令表示排序;“/r”表示逆序列排序。之所以要逆序列排序,是因為通過逆序列排序後,D盤上的所有子資料夾總是會位於其父資料夾的前面,這樣在用For命令刪除空資料夾時,空的子資料夾被首先刪除了,因此空的父資料夾就可以刪除了。否則,因空的父資料夾中尚有空的子資料夾,會造成無法刪除的情況。“>>d:\kill.txt”的作用是讓螢幕回顯重新定位到“d:\kill.txt”檔案中。 

  For 命令中引數“/f”的作用是讓For命令從指定的檔案中讀取資料作為變數,示例是從Dir的結果檔案“d:\kill.txt”檔案中讀取資料,每次讀取一行傳遞給RD命令;RD命令的作用是刪除由For命令傳遞過來的每一個資料夾,因RD命令無法刪除尚有內容的資料夾,所以經過For命令的迴圈後,只是刪除了所有的空資料夾,有內容的資料夾會完好無損地被保留下來。 

  4. 批量獲取區域網中所有IP地址與主機名的對應關係 

  如果你是網管,肯定需要獲取一張本網段內所有IP地址與主機名的對照表。如果你不想使用第三方軟體的話,不妨用For命令試試。   在命令提示符視窗中輸入以下命令:   For /L %i in (0,1,254) DO ping -a -n 1 192.168..0.%i |Find /i "reply" >>E:\IPAddress.txt   好了,等命令執行完畢,開啟“E:\IPAddress.txt”檔案,一張完整的IP與主機名的對照表已經初步形成了,你只需作簡單的編輯修改即可列印輸出了。   提示:For命令指定引數“%i”從0開始,每次增加1,直到254為止,即一個C類網段的全部地址。如果使用者的區域網自行定義的了IP地址,應根據實際情況設定,如可以為“172.16.0”;“-a”表示獲取主機名;“-n -1”表示回顯的次數為1次,預設情況下為4次;Find /i "reply“表示查詢已響應的主機,即已ping通的主機;“E:\IPAddress.txt”表示將螢幕回顯內容輸入到“:\IPAddress.txt”檔案中。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

批量改名

今天的《xxxHoLic》漫畫更新到了158話,我下載後,得到如下檔案:(加粗為使用者輸入的內容)C:\>d: (輸入D:以切換到D盤,否則下一個cd 命令無效)D:\>cd D:\xxxHoLic\vol14\158D:\xxxHoLic\vol14\158>dir/bXXXholic158_001.jpgXXXholic158_002-003.jpgXXXholic158_004.JPGXXXholic158_005.JPGXXXholic158_006.jpg

……(省略輸出若干)

我想將它們改名為01.jpg~20.jpg用命令該怎樣做呢?這裡只提供一種可能的辦法,實際上還有很多種方法。

D:\xxxHoLic\vol14\158>for %i  in (01,04,05,06,07,08,09) do  ren  XXXholic158_0%i.jpg%i.jpg  (for 命令中,%i變數遍歷小括號中的內容)

D:\xxxHoLic\vol14\158>renXXXholic158_001.jpg01.jpg

……(命令回顯會顯示實際執行的命令,省略輸出若干)

D:\xxxHoLic\vol14\158>renXXXholic158_009.jpg09.jpg

D:\xxxHoLic\vol14\158>for  /L  %i  in  (10,1,20)   do  ren  XXXholic158_0%i.jpg  %i.jpg

D:\xxxHoLic\vol14\158>renXXXholic158_010.jpg10.jpg

……(省略輸出若干)

D:\xxxHoLic\vol14\158>ren XXXholic158_020.jpg20.jpg

D:\xxxHoLic\vol14\158>ren  XXXholic158_002-003.jpg  02-03.jpg(最後手動改名)

D:\xxxHoLic\vol14\158>

以上主要通過for...in...do 結構及/L 引數,使得本來要19次的改名操作只用兩個for命令及一個ren 就搞定。for 命令詳細用法請參考其幫助頁。

------------------------------------------------------------------------------------------------------------------------

批量“粉碎”檔案

D:\xxxHoLic\vol14\158> for %i in (*.jpg) do copy nul %i /y

這裡使用/y 來防止copy 的覆蓋前提示。

------------------------------------------------------------------------------------------------------------------------

下載一系列圖片:for+wget

有時我們在網上看到一系列圖片,想把它們都下載下來,怎麼辦?首先要取得圖片的地址,只有當圖片的地址有一定規律性時,才能使用此法下載:在圖片上點右鍵->“屬性,然

下的1.jpg-100.jpg

網上有很多命令列小程式,可以增強命令列的功能。這裡使用GNUGNUWget該程式可通過HTTPHTTPSFTP協議下載檔案。

一般下載最新的穩定(stable)版本,解壓後進入wget的安裝目錄,輸入:

D:\soft\wget>md  E:\pic(建立目錄用來存放下載的圖片)

D:\soft\wget>for  /L  %i  in (1,1,100)  do wget -P E:\pichttp://www.example.com/%i.jpg

(注意,wget中的引數以“-”開頭,而不是“/”,而且嚴格區分大小寫。這是Unix風格的引數寫法。)

(-P 指定檔案的存放位置。wget的其他功能請參考其幫助手冊頁)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------