3.2.3 for循環(huán)語句

2022-04-13 15:07 更新

《批處理入門手冊》
三.批處理高級語句篇
-----------------------------------------------------------------------------------------------------
3.2.3 學習for循環(huán)語句

學習要點:
1.for /d 參數(shù) 查詢目錄
2.for /r 參數(shù) 遍歷搜索
3.for /l 參數(shù) 建立序列
-----------------------------------------------------------------------------------------------------


一、for /d 參數(shù) 查詢目錄
格式:FOR /D %%variable IN (set) DO command [command-parameters]

關于/d 參數(shù),大家要注意!
1,這個參數(shù)主要用于目錄搜索,不會搜索文件。
2,只能搜索指定目錄和缺省情況當前目錄下的目錄名字,不搜索子目錄。
-----------------------------------------------------------------------------------------------------

例1
@echo off
for /d %%i in (c:\*) do echo %%i
pause

執(zhí)行后會把C盤根目錄下的全部目錄名字打印出來,而文件則不顯示!如果我們要把當前路徑下文件夾的名字只有1~3
個字母的打出來,我們可以改成如下的

例2
@echo off
for /d %%i in (???) do echo %%i
pause

這樣的話,如果你當前目錄下有目錄名字只有 1~3 個字母的,就會顯示出來,沒有就不顯示。這里解釋下*號和?號的
作用,*號表示任意 N 個字符,而?號只表示任意一個字符。

例3
@echo off
for /d %%i in ("C:\Program Files\*") do echo %%i
pause
執(zhí)行后就會顯示C:\Program File目錄下的所有文件夾名稱了,"C:\Program Files\*" 這里用了雙引號是因為目錄中
有空格。

例4
@echo off
for /d %%i in (c:\w*) do echo %%i
pause

搜索以W開頭的目錄名稱!(不區(qū)分大小寫)

例5
@echo off
for /d %%i in (c:\w*s) do echo %%i
pause

搜索以W開頭S結尾的目錄名稱!(不區(qū)分大小寫)

例6
@echo off
for /d %%i in (*)do rd /s /q "%%i"
pause

這里是刪除當前目錄下的文件夾,但不會刪除文件。
先用for /d 取得當前目錄所有的文件夾,注意,是文件夾(如果是for /r ,則是文件)
然后再分別用rd命令把它(文件夾)刪除。那么剩下的都是文件了。

再說個小技巧:
for /d %%i in (*)do rd /s /q "%%i"
這語句可以寫作:
for /d %%i in (*)do echo rd /s /q "%%~fi"
當測試成功后,再把echo 去掉,這時執(zhí)行命令才會生效,防止出錯!
-----------------------------------------------------------------------------------------------------

 


二、for /r 參數(shù) 遍歷搜索
格式:FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters]

檢查以  [drive:]path  為根的目錄樹,指向每個目錄中的 FOR  語句。如果在  /R  后沒有指定目錄,則使用當前
目錄。如果集僅為一個單點(.)字符,則枚舉該目錄樹。

這個R可以理解為recursive的縮寫,也就是遞歸的意思。所謂遞歸簡單點來說就是對其目錄及其子目錄的所有文件進
行操作。

前面我們知道,/d 搜索的是目錄名字,那么現(xiàn)在這個/r 則是搜索當前或者你指定路徑下的文件名字。
-----------------------------------------------------------------------------------------------------


這里要注意2 點:
  1、set 中的文件名如果含有通配符(?或*),則列舉/R 參數(shù)指定的目錄及其下面的所有子目錄中與 set 相符合的
所有文件,無相符文件的目錄則不列舉。

例1
@echo off
for /r c:\ %%i in (*.exe) do echo %%i
pause

咱們把這個 BAT 保存到 D 盤隨便哪里然后執(zhí)行,我會就會看到,他把 C 盤根目錄,和每個目錄的子目錄下面全部的
EXE 文件都列出來了!

例2
@echo off
for /r %%i in (*.exe) do echo %%i
pause

這個命令前面沒加那個 c:\ (也就是搜索路徑),這樣它就會以當前目錄為搜索路徑,比如你這個 BAT放在 d:\test
目錄下執(zhí)行,那么它就會把 d:\test 目錄和它下面的子目錄的全部EXE 文件列出來!!!
-----------------------------------------------------------------------------------------------------


  2、如果 set  中為具體文件名,不含通配符,則枚舉該目錄樹(即列舉該目錄及其下面的所有子目錄),而不管
set 中的指定文件是否存在。這與前面所說的單點(.)枚舉目錄樹是一個道理,單點代表當前目錄,也可視為一個
文件。

例3
@echo off
for /r c:\ %%i in (boot.ini) do echo %%i
pause

執(zhí)行后,它不管boot.ini是否存在而將枚舉c 盤所有目錄。為了只列舉 boot.ini 存在的目錄,我們可改成下面這樣

例4
@echo off
for /r c:\ %%i in (boot.ini) do if exist %%i echo %%i
pause

我們再來看這個例子,

例5
@echo off
for /r %%i in (boot.ini) do echo %%i
pause

這個命令前面沒加那個 c:\ (即是搜索路徑),這樣它就會以當前目錄為搜索路徑,比如我這個 BAT放在 d:\test 目
錄下執(zhí)行,那么它不管boot.ini是否存在,會把 d:\test 目錄和它下面的子目錄全部列出來!!

☆☆注意:for /r不會遍歷隱藏文件!
-----------------------------------------------------------------------------------------------------

 


三、for /l 參數(shù) 建立序列
格式:FOR /L %%variable IN (start,step,end) DO command [command-parameters]

該語句中(start,step,end)表示以增量或者遞減形式從開始到結束的一個數(shù)字序列。因此,(1,1,5)將產(chǎn)生序列1 2 3
 4 5,(5,-1,1) 將產(chǎn)生序列5 4 3 2 1

/l參數(shù)將對start與end兩個數(shù)值進行比較來執(zhí)行迭代變量,如果star小于end,就會執(zhí)行該命令。如果迭代變量超過end
值,則命令解釋程序退出此循環(huán)。
 
看得頭暈了吧,那我們來看例子吧。

例1
@echo off
for /l %%i in (1,1,5) do echo %%i
pause

執(zhí)行看效果,他會打印從 1 2 3 4 5這樣5 個數(shù)字,而且每個數(shù)字占一行。
(1,1,5)這個參數(shù)也就是表示從 1 開始每次加 1 直到5 終止!


我們再來看

例2
@echo off
for /l %%i in (1,1,5) do start cmd
pause

執(zhí)行之后彈出了5個CMD窗口是不是嚇了一跳,呵呵^^P
把那個start cmd 改成md %%i  這樣我們就會名為1 2 3 4 5的5個目錄了!
-----------------------------------------------------------------------------------------------------

 


Januapr編輯于2009-09-13 星期日15:01:14.75

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號