佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > bat 批處理 for 命令快速入門

bat 批處理 for 命令快速入門

熱門標(biāo)簽:智能手機(jī) 銀行業(yè)務(wù) 網(wǎng)站文章發(fā)布 服務(wù)器配置 美圖手機(jī) 呼叫中心市場需求 鐵路電話系統(tǒng) 檢查注冊表項

格式:FOR [參數(shù)] %%變量名 IN (相關(guān)文件或命令) DO 執(zhí)行的命令
作用:對一個或一組文件,字符串或命令結(jié)果中的每一個對象執(zhí)行特定命令,達(dá)到我們想要的結(jié)果。
注意:在批處理文件中使用 FOR 命令時,指定變量請使用 %%variable,而不要用 %variable。變量名稱是區(qū)分大小寫的,所以 %i 不同于 %I.
關(guān)于:for命令可以帶參數(shù)或不帶參數(shù),帶參數(shù)時支持以下參數(shù):/d /l /r /f

  下面分別解釋一下

  零:無參數(shù)時:
  ---
  FOR %variable IN (set) DO command [command-parameters]
  %variable 指定一個單一字母可替換的參數(shù)。
  (set) 指定一個或一組文件。可以使用通配符。
  command 指定對每個文件執(zhí)行的命令。
  command-parameters
  為特定命令指定參數(shù)或命令行開關(guān)。

  TTT示例:
  for %%i in (t*.*) do echo %%i --顯示當(dāng)前目錄下與t*.*相匹配的文件(只顯示文件名,不顯示路徑)
  for %%i in (d:\mydocuments\*.doc) do @echo %%i --顯示d:\mydocuments\目錄下與*.doc相匹配的文件

一、參數(shù) /d (參數(shù)只能顯示當(dāng)前目錄下的目錄名字)

格式:FOR /D %variable IN (set) DO command [command-parameters]
  這個參數(shù)主要用于目錄搜索,不會搜索文件,/D 參數(shù)只能顯示當(dāng)前目錄下的目錄名字。(TTT特別說明:只會搜索指定目錄下的目錄,不會搜索再下一級的目錄。)

  TTT示例:
  for /d %%i in (c:\*) do echo %%i --顯示c盤根目錄下的所有目錄
  for /d %%i in (???) do echo %%i --顯示當(dāng)前目錄下名字只有1-3個字母的目錄

二、參數(shù) /R (搜索指定路徑及所有子目錄中與set相符合的所有文件)

格式:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
  此命令會搜索指定路徑及所有子目錄中與set相符合的所有文件,注意是指定路徑及所有子目錄。

  1、set中的文件名如果含有通配符(?或*),則列舉/R參數(shù)指定的目錄及其下面的所用子目錄中與set相符合的所有文件,無相符文件的目錄則不列舉。
  2、如果set中為具體文件名,不含通配符,則枚舉該目錄樹(即列舉該目錄及其下面的所有子目錄)(并在后面加上具體的文件名),而不管set中的指定文件是否存在。
  例:for /r c:\ %%i in (*.exe) do echo %%i --把C盤根目錄,和每個目錄的子目錄下面全部的EXE文件都列出來了!!!!

  TTT示例:
  for /r c:\ %%i in (boot.ini) do echo %%i --枚舉了c盤所有目錄
  for /r d:\backup %%i in (1) do echo %%i --枚舉d\backup目錄
  for /r c:\ %%i in (boot.ini) do if exist %%i echo %%i --很好的搜索命令,列舉boot.ini存在的目錄

三、參數(shù) /L (該集表示以增量形式從開始到結(jié)束的一個數(shù)字序列??梢允褂秘?fù)的 Step)

格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]
  該集表示以增量形式從開始到結(jié)束的一個數(shù)字序列。可以使用負(fù)的 Step

  TTT示例:
  for /l %%i in (1,1,5) do @echo %%i --輸出1 2 3 4 5
  for /l %%i in (1,2,10) do @echo %%i --輸出1,3,5,7,9
  for /l %%i in (100,-20,1) do @echo %%i --輸出100,80,60,40,20
  for /l %%i in (1,1,5) do start cmd --打開5個CMD窗口
  for /l %%i in (1,1,5) do md %%i --建立從1~5共5個文件夾
  for /l %%i in (1,1,5) do rd /q %%i --刪除從1~5共5個文件夾

四、參數(shù) /F (使用文件解析來處理命令輸出、字符串及文件內(nèi)容。)

這個參數(shù)是最難的,參數(shù)又多,先簡單的解釋一下:for命令帶這個參數(shù)可以分析文件內(nèi)容,字符串內(nèi)容或某一命令輸出的結(jié)果,并通過設(shè)置option得我們想要的結(jié)果。
  以下是某高手的解釋,感覺有點太專業(yè)了,自認(rèn)為不太容易理解,也列一下:
  [迭代及文件解析--使用文件解析來處理命令輸出、字符串及文件內(nèi)容。使用迭代變量定義要檢查的內(nèi)容或字符串,并使用各種options選項進(jìn)一步修改解析方式。使用options令牌選項指定哪些令牌應(yīng)該作為迭代變量傳遞。
  請注意:在沒有使用令牌選項時,/F 將只檢查第一個令牌。文件解析過程包括讀取輸出、字符串或文件內(nèi)容,將其分成獨(dú)立的文本行以及再將每行解析成零個或更多個令牌。然后通過設(shè)置為令牌的迭代變量值,調(diào)用 for 循環(huán)。
  默認(rèn)情況下,/F 傳遞每個文件每一行的第一個空白分隔符號。跳過空行。]

  (TTT補(bǔ)充說明:
  一般在tokens后只指定第一個參數(shù),如%%i或%%a,在后面使用第二個及兩個以上的參數(shù),自動按順序往下排即可。如前面指定的是%%a,后面則 用%%b代表第二個結(jié)果,%%c代表第 三個結(jié)果。。。測試了一下tokens后指定多個變量名,沒有測試成功,應(yīng)該是不可以的。所以token后只能跟要使用的第一個變量名
  如果使用的變量名超過了%z或%Z,就無法使用了,曾經(jīng)以為會循環(huán)過來:如%%z后可以使用%%a或%%A,但經(jīng)測試,這是不可以的。
  如:for /f "tokens=1,2,3* delims=-, " %%y in ("aa bb,cc-dd ee") do echo %%y %%z %%A %%a --只會輸出前兩個字符串,后面的兩個變量是無效的。)

  TTT:下面列我做的幾個例子:

1,分析文件的例子
  FOR /F "eol=; tokens=1,2* delims=,- " %%i in (d:\test.txt) do echo %%i %%j %%k
  2,分析字符串的例子:
  for /f "tokens=1,2,3* delims=-, " %%i in ("aa bb,cc-dd ee") do echo %%i %%j %%k %%l
  3,分析命令輸出的例子:
  FOR /F "tokens=1* delims==" %%i IN ('set') DO @echo [%%i----%%j]

  如果使用了usebackq參數(shù)后,命令如下,結(jié)果與上面的完全相同。
  1,分析文件的例子
  FOR /F "usebackq eol=; tokens=1,2* delims=,- " %%i in ("d:\test.txt") do echo %%i %%j %%k
  2,分析字符串的例子:
  for /f "usebackq tokens=1,2,3* delims=-, " %%i in ('aa bb,cc-dd ee') do echo %%i %%j %%k %%l
  3,分析命令輸出的例子:(會枚舉當(dāng)前環(huán)境中的環(huán)境變量名稱和值。)
  FOR /F "usebackq tokens=1* delims==" %%i IN (`set`) DO @echo [%%i----%%j]
  結(jié)果大家可以試一下,很容易就明白的。

 下面依次說明一下:

一、 ~I - 刪除任何引號("),擴(kuò)展 %I

這個變量的作用就如他的說明,刪除引號!
  刪除引號規(guī)則如下(BAT兄補(bǔ)充!):
  1、若字符串首尾同時存在引號,則刪除首尾的引號;
  2、若字符串尾不存在引號,則刪除字符串首的引號;
  3、如果字符串中間存在引號,或者只在尾部存在引號,則不刪除。
  龍卷風(fēng)補(bǔ)充:無頭不刪,有頭連尾刪。

  我們來看這個例子,首先建立臨時文件temp.txt,內(nèi)容如下

  "1111
  "2222"
  3333"
  "4444"44
  "55"55"55

  也可建立個BAT文件代碼如下:

  @echo off
  echo ^"1111>temp.txt
  echo "2222">>temp.txt
  echo 3333^">>temp.txt
  echo "4444"44>>temp.txt
  echo ^"55"55"55>>temp.txt
  rem 上面建立臨時文件,注意不成對的引號要加轉(zhuǎn)義字符^,重定向符號前不要留空格
  FOR /F "delims=" %%i IN (temp.txt) DO echo %%~i
  pause
  del temp.txt

  執(zhí)行后,我們看CMD的回顯如下:

  1111 #字符串前的引號被刪除了
  2222 #字符串首尾的引號都被刪除了
  3333" #字符串前無引號,后面的引號保留
  4444"44 #字符串前面的引號刪除了,而中間的引號保留
  55"55"55 #字符串前面的引號刪除了,而中間的引號保留

  請按任意鍵繼續(xù). . .

  結(jié)果和之前temp.txt中的內(nèi)容對比一下,我們會發(fā)現(xiàn)第1、2、5行的引號都消失了,這就是刪除引號~i的作用了!

二、 %~fI - 將 %I 擴(kuò)展到一個完全合格的路徑名

示例:
  把代碼保存放在隨便哪個地方,我這里就放桌面吧.
  FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~fi
  pause

  執(zhí)行后顯示內(nèi)容如下
  C:\Documents and Settings\Administrator\桌面\test.bat
  C:\Documents and Settings\Administrator\桌面\test.vbs
  當(dāng)我把代碼中的 %%~fi直接改成%%i
  FOR /F "delims==" %%i IN ('dir /b') DO @echo %%i
  pause
  執(zhí)行后就會顯示以下內(nèi)容:
  test.bat
  test.vbs
  通過對比,我們很容易就看出沒有路徑了,這就是"將 %I 擴(kuò)展到一個完全合格的路徑名"的作用,也就是如果%i變量的內(nèi)容是一個文件名的話,他就會把這個文件所在的絕對路徑打印出來,而不只單單打印一個文件名,自己動手動實驗下就知道了!

三、 %~dI - 僅將 %I 擴(kuò)展到一個驅(qū)動器號

看例子:
  代碼如下,我還是放到桌面執(zhí)行!
  FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~di
  pause
  執(zhí)行后我CMD里顯示如下
  C:
  C:
  我桌面就兩個文件test.bat,test.vbs,%%~di作用是,如果變量%%i的內(nèi)容是一個文件或者目錄名,他就會把他這文件或者目錄所在的盤符號打印出來!

四、 %~pI - 僅將 %I 擴(kuò)展到一個路徑

  這個用法和上面一樣,他只打印路徑不打印文件名字
  FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~pi
  pause
  我就不打結(jié)果了,大家自己復(fù)制代碼看結(jié)果吧,下面幾個都是這么個用法,代碼給出來,大家自己看結(jié)果吧!

五、 %~nI - 僅將 %I 擴(kuò)展到一個文件名

  只打印文件名字
  FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ni
  pause

六、 %~xI - 僅將 %I 擴(kuò)展到一個文件擴(kuò)展名

  只打印文件的擴(kuò)展名
  FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~xi
  pause

七、 %~sI - 擴(kuò)展的路徑只含有短名

  打印絕對短文件名
  FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~si
  pause

八、 %~aI - 將 %I 擴(kuò)展到文件的文件屬性

  打印文件的屬性
  FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ai
  pause

九、 %~tI - 將 %I 擴(kuò)展到文件的日期/時間

  打印文件建立的日期
  FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~ti
  pause

十、 %~zI - 將 %I 擴(kuò)展到文件的大小

  打印文件的大小
  FOR /F "delims==" %%i IN ('dir /b') DO @echo %%~zi
  pause
  龍卷風(fēng)補(bǔ)充:上面例子中的"delims=="可以改為"delims=",即不要分隔符

十一、 %~$PATH:I - 查找列在路徑環(huán)境變量的目錄,并將 %I 擴(kuò)展到找到的第一個完全合格的名稱。如果環(huán)境變量名未被定義,或者沒有找到文件,此組合鍵會擴(kuò)展到空字符串

  這是最后一個,和上面那些都不一樣,我單獨(dú)說說!
  然后在把這些代碼保存為批處理,放在桌面。
  @echo off
  FOR /F "delims=" %%i IN (“notepad.exe”) DO echo %%~$PATH:i
  pause
  龍卷風(fēng)補(bǔ)充:上面代碼顯示結(jié)果為C:\WINDOWS\system32\notepad.exe
  他的意思就在PATH變量里指定的路徑里搜索notepad.exe文件,如果有notepad.exe則會把他所在絕對路徑打印出來,沒有就打印一個錯誤!
  (TTT說明,保存到桌面上,運(yùn)行顯示結(jié)果為:系統(tǒng)找不到文件 “notepad.exe”。查看環(huán)境變量path中確實有這個路徑,不明原因!后來發(fā)現(xiàn)了,原來是中文引號的原因。
  上面的命令應(yīng)該寫成:
  FOR /F "delims=" %%i IN ("notepad.exe") DO echo %%~$PATH:i
  )

您可能感興趣的文章:
  • 批處理(bat)獲取指定目錄下的所有文件列表
  • BAT 批處理腳本教程(詳細(xì)篇腳本之家補(bǔ)充)
  • Windows下使用批處理文件.bat刪除舊文件
  • 利用bat批處理程序通過DOS命令行刪除所有的空文件夾的方法
  • bat命令批處理判斷32位還是64位系統(tǒng)的多種方法
  • 修改Windows Server 2008 R2 的3389遠(yuǎn)程端口的Bat批處理代碼
  • 批處理統(tǒng)計文件夾內(nèi)的所有文件的數(shù)量和總大小的bat
  • 批處理文件bat腳本實現(xiàn)代碼自動提交和項目部署

標(biāo)簽:紅河 樂山 河南 沈陽 上海 長治 滄州 新疆

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《bat 批處理 for 命令快速入門》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    光山县| 尼玛县| 女性| 温泉县| 尖扎县| 红安县| 元氏县| 利川市| 定州市| 黑水县| 芮城县| 沙洋县| 木里| 当涂县| 云阳县| 安徽省| 淅川县| 天等县| 都兰县| 融水| 克拉玛依市| 梨树县| 阿坝| 无锡市| 河间市| 淮滨县| 怀来县| 和硕县| 海南省| 泗阳县| 准格尔旗| 拉萨市| 日照市| 边坝县| 郑州市| 张北县| 郁南县| 潞西市| 正安县| 东乌珠穆沁旗| 高台县|