【Windows】Windows中解析DOS的for命令使用

來源:互聯網
上載者:User

標籤:for   元素   特定   開啟   start   type命令   命令   菜單鍵   struct   

目錄結構:

contents structure [+]
  1. 簡介
  2. for /d ... in ...
    1. 案例
      1. 案例:列印C://根目錄下所有的檔案夾名稱
      2. 案例:列印當前路徑下,只有1-3個字母的檔案夾名
      3. 案例:顯示所有以window開始的檔案夾名稱
  3. for /r ... in ...
    1. 案例
      1. 案例:顯示目前的目錄及子目錄下的所有以.exe結尾的檔案名稱
      2. 案例:顯示目前的目錄及子目錄的所有目錄名
  4. for /L ... in ...
    1. 案例
      1. 案例:增加5個CMD視窗
  5. 監聽 菜單鍵
    1. delims關鍵字
    2. tokens關鍵字
    3. skip和eol關鍵字
一.簡介

在DOS視窗中,輸入for /?查看官方給出的for命令的用法。

FOR %variable IN (set) DO command [command-parameters]%variable 指定一個單一字母可替換的參數。(set)      指定一個或一組檔案。可以使用萬用字元(* 和 ?)。command    指定對每個檔案執行的命令。command-parameters  為特定命令指定參數或命令列開關。 現在開始講每個參數的意思 


我們知道了一個for命令的基本格式為:FOR 參數 %變數名 IN (相關檔案或命令) DO 執行的命令。這裡需要注意在DOS視窗中和在批次檔中,for命令的格式有一定的差別,在DOS視窗中,變數以單百分比符號加字母表示,但若是在批次檔中,變數以雙百分比符號加字母表示,批次檔中,for命令的基本格式為:FOR 參數 %%變數名 IN (相關檔案或命令) DO 執行的命令。
參數有四種,分別為/d、/r、/L、/f,每一種參數對應的for命令的具體格式也有所不同。接下來以此講解每一種參數的使用:
接下來的所有案例,若不是特別說明,都是以批次檔的方式。

二.for /d ... in ...

/d表示目錄搜尋,它主要用於搜尋目錄,不會搜尋檔案。
for命令的格式為:FOR /D %%variable IN (set) DO command
如果set包含萬用字元,將對set想匹配的每個目錄執行Command,%%variable代表了每一個目錄。

2.1 案例案例:列印C://根目錄下所有的檔案夾名稱
@echo offrem 進入到c盤根目錄c:rem 列印目前的目錄下的所有檔案夾名稱for /d %%i in (*) do @echo %%ipause
案例:列印當前路徑下,只有1-3個字母的檔案夾名稱
@echo offfor /d %%i in (???) do @echo %%ipause
案例:顯示所有以window開始的檔案夾名稱
@echo offrem 進入到C盤c:rem 顯示所有以window開始的檔案夾名稱for /d %%i in (window?) do @echo %%ipause
三.for /r ... in ...

/r表示遞迴,以遞迴的方式對目前的目錄下的每個目錄執行操作。
for命令的格式為:FOR /R [[drive:]path] %%variable IN (set) DO command
中括弧[]表示可有可無,如果不指定開始遞迴的根目錄,則以目前的目錄作為遞迴的根目錄。
這裡需要注意,若set為點(.),則只枚舉分類樹。

3.1 案例案例:顯示C盤中所有以.exe結尾的檔案名稱
@echo offfor /r c: %%i in (*.exe) do @echo %%ipause
案例:顯示目前的目錄及子目錄下的所有以.exe結尾的檔案名稱
@echo offfor /r %%i in (*.exe) do @echo %%ipause
案例:顯示目前的目錄及子目錄的所有目錄名
@echo offfor /r  %%i in (.) do @echo %%ipause


現在清楚了/d 和 /r 參數的同異點了,他們都和目錄有關,但/d只會檢索目前的目錄下的所有目錄,但/r可以以遞迴的方式檢索所有目錄。

四.for /L ... in ...

/L可以寫成小寫字母的/l,為了和數字1區分,下面還是用大寫的字母L。
/L表示迭代變數,在給定的起點、步長、終點迭代資料。
for命令的格式:for /L %%Variable in (Start#,Step#,End#) do Command
使用迭代變數設定起始值 (Start#),然後逐步執行一組範圍的值,直到該值超過所設定的終止值 (End#)。/L 將通過對 Start# 與 End# 進行比較來執行迭代變數。如果 Start# 小於 End#,就會執行該命令。

4.1案例案例:列印1到5
@echo offfor /L %%i in (1,1,5) do @echo %%ipause
案例:增加5個CMD視窗
@echo offfor /L %%i in (1,1,5) do start cmdpause


會發現,新增加了5個CMD視窗,若是(1,1,65535)呢,就會多開啟65535個CMD視窗。如果把上面的start cmd換成 md %%i,那麼就可以多建立5個檔案夾。

五.for /f ... in ...

含有/f的for命令使用最多,
for命令的格式:

FOR /F ["options"] %%i IN (file) DO commandFOR /F ["options"] %%i IN ("string") DO commandFOR /F ["options"] %%i IN (command) DO commandfile代表一個或多個檔案string 代表字串command代表命令["options"] 可選


對於for命令的三個格式都大通小異,IN(file),IN("string"),IN(command)分別表示從檔案、字串、命令中讀取資料。

file為檔案名稱,按照官方的說法是,for會依次將file中的檔案開啟,並且在進行到下一個檔案之前將每個檔案讀取到記憶體,按照每一行分成一個一個的元素,忽略空白的行,看個例子。

假如檔案a.txt中有如下內容:
第1行第1列 第1行第2列 第1行第3列
第2行第1列 第2行第2列 第2行第3列
第3行第1列 第3行第2列 第3行第3列


可以使用type命令來顯示:

@echo offtype a.txtpause

顯示如下:

第1行第1列 第1行第2列 第1行第3列第2行第1列 第2行第2列 第2行第3列第3行第1列 第3行第2列 第3行第3列

使用for命令同樣也可以完成這個功能:

@echo offfor /f "delims=\n" %%i in (a.txt) do echo %%i pause

其中delims=\n表示以分行符號分割,

@echo offfor /f %%i in ("asas    daa") do @echo %%ipause

上面的語句會顯示asas。

delims關鍵字

delims關鍵字表示分隔字元,需要注意若不指定delims那麼,預設以空格和Tab鍵分割。如果按照下面的格式使用空格來顯示的話:

@echo offfor /f "delims= " %%i in (a.txt) do echo %%i pause

顯示:

第1行第1列第2行第1列第3行第1列

可以看出值顯示了第一列的值

tokens關鍵字

tokens命令可以指定顯示哪一列的資料,該命令還支援萬用字元(*)

@echo offfor /f "tokens=2,3 delims= " %%i in (a.txt) do @echo %%i %%jpause

效果:

第1行第2列 第1行第3列第2行第2列 第2行第3列第3行第2列 第3行第3列

在上面的命令中多了%%j,這是for命令自動添加上的,通過"tokens=2,3 delims= "表示以空格為分割符號,取沒行的第2和第3列資料。並且把第列的資料賦值給%%i,把第三列的資料賦值給%%j。如果要把第二列和第三列顯示到同一列,那麼可以把tokens=2,3換為tokens=2-3。

對於萬用字元就是把這一行或是剩下的全部元素作為一列資料

@echo offfor /f "tokens=1,*" %%i  in (a.txt) do @echo %%i %%jpause

顯示:

第1行第1列 第1行第2列 第1行第3列第2行第1列 第2行第2列 第2行第3列第3行第1列 第3行第2列 第3行第3列
skip和eol關鍵字

skip就是要忽略檔案的前多少行,而eol用來指定當一行以什麼符號開始時,就忽略它。

@echo offfor /f "skip=2 tokens=*" %%i in (a.txt) do @echo %%ipause



 

【Windows】Windows中解析DOS的for命令使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.