格式: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 傳遞每個文件每一行的第一個空白分隔符號。跳過空行。]
格式:
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
或者,如果有 usebackq 選項:
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]
TTT說明:以上是WinXP系統(tǒng)中的幫助內(nèi)容,你可以注意到,兩者完全相同,這其實是系統(tǒng)的錯誤,第二段“如果有 usebackq 選項:”應(yīng)該以下的內(nèi)容:
FOR /F ["options"] %variable IN ("file-set") DO command [command-parameters]
FOR /F ["options"] %variable IN ('string') DO command [command-parameters]
FOR /F ["options"] %variable IN (`command`) DO command [command-parameters] --(`command`中的引號為反引號,是鍵盤上數(shù)字1左面的那個鍵)
(TTT說明:下面是詳細(xì)的解釋,大部分是系統(tǒng)中的幫助內(nèi)容,也有些錯誤(怪不得for命令這么難學(xué)),已經(jīng)被我糾正了。)
1) OPTION關(guān)鍵字詳解:
eol=c:指一個行注釋字符的結(jié)尾(就一個)。例如:eol=; --忽略以分號打頭的那些行;
skip=n:指在文件開始時忽略的行數(shù)。例如:skip=2 --忽略2行;
delims=xxx:指分隔符集。這個替換了空格和跳格鍵的默認(rèn)分隔符集。例如:[delims=, ] --指定用逗號,空格對字符串進(jìn)行分隔。
tokens=x,y,m-n:指每行的哪一個符號被傳遞到每個迭代的 for 本身。這會導(dǎo)致額外變量名稱的分配。m-n格式為一個范圍。通過 nth 符號指定 mth。如果符號字符串中的最后一個字符是星號,那么額外的變量將在最后一個符號解析之后分配并接受行的保留文本。例如:tokens=2,3* --將每行中的第二個和第三個符號傳遞給 for 程序體;tokens=2,3* ... i% --將會把取到的第二個字符串賦給i%,第三個賦給j%,剩下的賦給k%。
關(guān)于usebackq,不同版本的系統(tǒng)提示不同的幫助,不過都有助于理解,所以都摘抄如下:
(1),usebackq:使用后引號(鍵盤上數(shù)字1左面的那個鍵`)。未使用參數(shù)usebackq時:file-set表示文件,不能加引號,所以 不能含有空格;加雙引號表示字符串,即"string";加單引號表示執(zhí)行命令,即'command'。使用參數(shù)usebackq時:file-set 和"file-set"都表示文件,當(dāng)文件路徑或名稱中有空格時,就可以用雙引號括起來;單引號表示字符串,即'string';后引號表示命令執(zhí)行,即 `command`。(此段是WinXP系統(tǒng)中的幫助)
(2),usebackq:指定新語法已在下類情況中使用:在作為命令執(zhí)行一個后引號的字符串;并且一個單引號字符為文字字符串命令;并允許在filenameset中使用雙引號擴(kuò)起文件名稱。
以上兩條結(jié)合著看,其實已經(jīng)可以明白了,我再說明一下:
其實這個參數(shù)的目的就是為了處理帶有空格的文件名。如果您要處理的文件名和路徑中含有空格,如果直接使用,會提示找不到文件。如果你用雙引號將文件名 和路徑括起來。這時候?qū)⒆鳛樽址幚?,而不是作為文件了。為了?yīng)對這種情況,所以才增加了這個“usebackq”參數(shù)。如果使用了這個參數(shù),對于括號 中的加雙引號的集合,系統(tǒng)就可以認(rèn)為是文件了;真正的字符串要加單引號;命令要加反引號。
2) file-set 為一個或多個文件名。繼續(xù)到 file-set 中的下一個文件之前,每份文件都已被打開、讀取并經(jīng)過處理。處理包括讀取文件,將其分成一行行的文字,然后將每行解析成零或更多的符號。然后用已找到的符 號字符串變量值調(diào)用 For 循環(huán)。以默認(rèn)方式,/F 通過每個文件的每一行中分開的第一個空白符號。跳過空白行。您可通過指定可選 "options"參數(shù)替代默認(rèn)解析操作。這個帶引號的字符串包括一個或多個指定不同解析選項的關(guān)鍵字。
3) %i:專門在 for 語句中得到說明,%j 和 %k 是通過tokens= 選項專門得到說明的。您可以通過 tokens= 一行指定最多 26 個符號,只要不試圖說明一個高于字母 'z' 或'Z' 的變量。請記住,F(xiàn)OR 變量是單一字母、分大小寫和全局的;而且,同時不能有 52 個以上都在使用中。
(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 --只會輸出前兩個字符串,后面的兩個變量是無效的。)
以下是系統(tǒng)提供的范例:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do @echo %i %j %k --
說明:會分析 myfile.txt 中的每一行,
eol=; --忽略以分號打頭的那些行;
tokens=2,3* --將每行中的第二個和第三個符號傳遞給 for 程序體;
delims= , --用逗號和/或空格定界符號。
%i --這個 for 程序體的語句引用 %i 來取得取得的首個字符串(本例中為第二個符號),引用 %j 來取得第二個字符串(本例中為第三個符號)引用 %k來取得第三個符號后的所有剩余符號。
(TTT說明:上述例子和說明中明顯的錯誤,%i應(yīng)該換為%%i(幫助中有明確的說明:指定變量請使用 %%variable,而不要用 %variable,誤導(dǎo))
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é)果大家可以試一下,很容易就明白的。
FOR命令中的變量
FOR 變量參照的替換已被增強(qiáng)。您現(xiàn)在可以使用下列選項語法:
~I - 刪除任何引號("),擴(kuò)充 %I
%~fI - 將 %I 擴(kuò)充到一個完全合格的路徑名
%~dI - 僅將 %I 擴(kuò)充到一個驅(qū)動器號
%~pI - 僅將 %I 擴(kuò)充到一個路徑
%~nI - 僅將 %I 擴(kuò)充到一個文件名
%~xI - 僅將 %I 擴(kuò)充到一個文件擴(kuò)展名
%~sI - 擴(kuò)充的路徑只含有短名
%~aI - 將 %I 擴(kuò)充到文件的文件屬性
%~tI - 將 %I 擴(kuò)充到文件的日期/時間
%~zI - 將 %I 擴(kuò)充到文件的大小
%~$PATH:I - 查找列在路徑環(huán)境變量的目錄(TTT提示:是環(huán)境變量path的目錄),并將 %I 擴(kuò)充到找到的第一個完全合格的名稱。如果環(huán)境變量名未被定義,或者沒有找到文件,此組合鍵會擴(kuò)充到空字符串
此外,還可以組合修飾符來得到多重結(jié)果:
%~dpI - 僅將 %I 擴(kuò)充到一個驅(qū)動器號和路徑
%~nxI - 僅將 %I 擴(kuò)充到一個文件名和擴(kuò)展名
%~fsI - 僅將 %I 擴(kuò)充到一個帶有短名的完整路徑名
%~dp$PATH:i - 查找列在路徑環(huán)境變量的目錄,并將 %I 擴(kuò)充到找到的第一個驅(qū)動器號和路徑。
%~ftzaI - 將 %I 擴(kuò)充到類似輸出線路的 DIR
在以上例子中,%I 和 PATH 可用其他有效數(shù)值代替。%~ 語法用一個有效的 FOR 變量名終止。選取類似 %I 的大寫變量名比較易讀,而且避免與不分大小寫的組合鍵混淆。
(以上是系統(tǒng)幫助的內(nèi)容)
我們可以看到每行都有一個大寫字母"I",這個I其實就是我們在FOR帶入的變量,例如:
FOR /F "usebackq eol=; tokens=1,2* delims=,- " %%x in ("d:\test.txt") do echo %%x %%y %%z
這里我們就要把那個x,y,z改成%~fx,%~fy,%~fz。
TTT特例:以下是我根據(jù)以上說明作的一個綜合的例子,可以直接復(fù)制到記事本里,保存為bat格式(c盤下任一目錄),運(yùn)行后,可以直觀的看到擴(kuò)展后的效果。
@echo off
echo ---顯示"dir c:\boot.ini /b /ah"
for /f "delims==" %%i in ('dir c:\boot.ini /b /ah') do echo 不擴(kuò)展變量 %%i
for /f "delims==" %%i in ('dir c:\boot.ini /b /ah') do echo 擴(kuò)展變量到~fI %%~fi --擴(kuò)充到一個完全合格的路徑名
for /f "delims==" %%i in ('dir c:\boot.ini /b /ah') do echo 擴(kuò)展變量到~dI %%~di --僅將變量擴(kuò)充到一個驅(qū)動器號
for /f "delims==" %%i in ('dir c:\boot.ini /b /ah') do echo 擴(kuò)展變量到~pI %%~pi --僅將變量擴(kuò)充到一個路徑
for /f "delims==" %%i in ('dir c:\boot.ini /b /ah') do echo 擴(kuò)展變量到~nI %%~ni --僅將變量擴(kuò)充到一個文件名
for /f "delims==" %%i in ('dir c:\boot.ini /b /ah') do echo 擴(kuò)展變量到~xI %%~xi --僅將變量擴(kuò)充到一個文件擴(kuò)展名
for /f "delims==" %%i in ('dir c:\boot.ini /b /ah') do echo 擴(kuò)展變量到~sI %%~si --擴(kuò)充的路徑只含有短名
for /f "delims==" %%i in ('dir c:\boot.ini /b /ah') do echo 擴(kuò)展變量到~aI %%~ai --將變量擴(kuò)充到文件的文件屬性
for /f "delims==" %%i in ('dir c:\boot.ini /b /ah') do echo 擴(kuò)展變量到~tI %%~ti --將變量擴(kuò)充到文件的日期/時間
for /f "delims==" %%i in ('dir c:\boot.ini /b /ah') do echo 擴(kuò)展變量到~zI %%~zi --將變量擴(kuò)充到文件的大小
for /f "delims==" %%i in ('dir c:\boot.ini /b /ah') do echo 擴(kuò)展變量到~$PATH:I %%~$PATH:i --查找列在路徑環(huán)境變量的目錄,并將變量擴(kuò)充到找到的第一個完全合格的名稱
echo ---以下顯示組合修飾符來得到多重結(jié)果---:
for /f "delims==" %%i in ('dir c:\boot.ini /b /ah') do echo 擴(kuò)展變量到~dpI %%~dpi --僅將變量擴(kuò)充到一個驅(qū)動器號和路徑
for /f "delims==" %%i in ('dir c:\boot.ini /b /ah') do echo 擴(kuò)展變量到~nxI %%~nxi --僅將變量擴(kuò)充到一個文件名和擴(kuò)展名
for /f "delims==" %%i in ('dir c:\boot.ini /b /ah') do echo 擴(kuò)展變量到~fsI %%~fsI --僅將變量擴(kuò)充到一個帶有短名的完整路徑名
for /f "delims==" %%i in ('dir c:\boot.ini /b /ah') do echo 擴(kuò)展變量到~dp$PATH:I %%~dp$PATH:i --查找列在路徑環(huán)境變量的目錄,并將變量擴(kuò)充到找到的第一個驅(qū)動器號和路徑
for /f "delims==" %%i in ('dir c:\boot.ini /b /ah') do echo 擴(kuò)展變量到~ftzaI %%~ftzai --將變量擴(kuò)充到類似輸出線路的DIR
echo.
echo ---顯示"dir C:\WINDOWS\system32\notepad.exe /b"
for /f "delims==" %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 不擴(kuò)展變量 %%i
for /f "delims==" %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 擴(kuò)展變量到~fI %%~fi --擴(kuò)充到一個完全合格的路徑名
for /f "delims==" %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 擴(kuò)展變量到~dI %%~di --僅將變量擴(kuò)充到一個驅(qū)動器號
for /f "delims==" %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 擴(kuò)展變量到~pI %%~pi --僅將變量擴(kuò)充到一個路徑
for /f "delims==" %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 擴(kuò)展變量到~nI %%~ni --僅將變量擴(kuò)充到一個文件名
for /f "delims==" %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 擴(kuò)展變量到~xI %%~xi --僅將變量擴(kuò)充到一個文件擴(kuò)展名
for /f "delims==" %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 擴(kuò)展變量到~sI %%~si --擴(kuò)充的路徑只含有短名
for /f "delims==" %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 擴(kuò)展變量到~aI %%~ai --將變量擴(kuò)充到文件的文件屬性
for /f "delims==" %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 擴(kuò)展變量到~tI %%~ti --將變量擴(kuò)充到文件的日期/時間
for /f "delims==" %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 擴(kuò)展變量到~zI %%~zi --將變量擴(kuò)充到文件的大小
for /f "delims==" %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 擴(kuò)展變量到~$PATH:I %%~$PATH:i --查找列在路徑環(huán)境變量的目錄,并將變量擴(kuò)充到找到的第一個完全合格的名稱
echo ---以下顯示組合修飾符來得到多重結(jié)果---:
for /f "delims==" %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 擴(kuò)展變量到~dpI %%~dpi --僅將變量擴(kuò)充到一個驅(qū)動器號和路徑
for /f "delims==" %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 擴(kuò)展變量到~nxI %%~nxi --僅將變量擴(kuò)充到一個文件名和擴(kuò)展名
for /f "delims==" %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 擴(kuò)展變量到~fsI %%~fsI --僅將變量擴(kuò)充到一個帶有短名的完整路徑名
for /f "delims==" %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 擴(kuò)展變量到~dp$PATH:I %%~dp$PATH:i --查找列在路徑環(huán)境變量的目錄,并將變量擴(kuò)充到找到的第一個驅(qū)動器號和路徑
for /f "delims==" %%i in ('dir C:\WINDOWS\system32\notepad.exe /b') do echo 擴(kuò)展變量到~ftzaI %%~ftzai --將變量擴(kuò)充到類似輸出線路的DIR
Pause
TTT說明:
1,以上命令中,%%~fsI無法顯示,估計是系統(tǒng)錯誤,因為%%~fI是擴(kuò)充到一個完全合格的路徑名,%%~sI只含有短文件名,本身是相互矛盾的,所以出錯。不知是系統(tǒng)的錯誤還是在考我們~~
2,以上命令如果保存在別的盤中,無法顯示正確的驅(qū)動器和路徑。
3,如果想要%%~dp$PATH:i正常顯示,要保證環(huán)境變量path中確實有這個路徑:C:\WINDOWS\system32。
下面依次說明一下:
一、 ~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
)
最后發(fā)一個用批處理做一五子棋游戲可以參考下面的文章
https://www.jb51.net/article/29885.htm
您可能感興趣的文章:- 使用批處理實現(xiàn)啟動和停止服務(wù)的代碼分析(net startnet stop)
- 全盤刪除所有文件夾下的_desktop.ini的批處理bat文件
- 一鍵清除_desktop.ini文件的批處理文件
- 利用bat批處理程序通過DOS命令行刪除所有的空文件夾的方法
- bat命令批處理判斷32位還是64位系統(tǒng)的多種方法
- bat 批處理 for 命令快速入門
- 批處理入門手冊之批處理常用DOS命令篇(find findstr)
- 批處理入門手冊之批處理常用DOS命令篇(md、rd、ren、move)
- 批處理入門手冊之批處理常用DOS命令篇(attrib、del、copy、xcopy)
- 批處理入門手冊之批處理常用DOS命令篇(echo、rem、cd、dir)
- DOS 批處理命令For循環(huán)命令詳解
- Windows命令行bat批處理延遲sleep方法(批處理延時)
- 批處理模式下運(yùn)行 top 命令的方法