導航:首頁 > 程序命令 > 命令行for循環

命令行for循環

發布時間:2024-03-28 11:50:13

❶ shell里的for循環怎麼寫

for循環的運作方式,是講串列的元素意義取出,依序放入指定的變數中,然後重復執行含括的命令區域(在do和done 之間),直到所有元素取盡為止。

其中,串列是一些字元串的組合,彼此用$IFS所定義的分隔符(如空格符)隔開,這些字元串稱為欄位。
for的語法結構如下:

1
2
3
4

for 變數 in 串列
do
執行命令
done

說明:

行1,講串列中的欄位迭代放入變數中
行2-4,接著將重復執行do和done之間的命令區域,直到串列中每一個欄位軍處理過為止。
流程圖:

用例1
用for循環在家目錄下創建aaa1-aaa10,然後在aaa1-aaa10創建bbb1-bbb10的目錄

1
2
3
4
5
6
7
8
9
10
11
12

#!/bin/bash
for k in $( seq 1 10 )
do
mkdir /home/kuangl/aaa${k}
cd /home/kuangl/aaa${k}
for l in $( seq 1 10 )
do
mkdir bbb${l}
cd /home/kuangl/aaa${k}
done
cd ..
done

說明:
行2,seq 用於產生從某個數到另外一個數之間的所有整數。
行4,在家目錄下創建文件夾
行6,在使用一個for循環創建文件夾
測試結果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

[root@test01 kuangl]# ll
total 80
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa1
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa10
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa2
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa3
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa4
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa5
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa6
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa7
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa8
drwxr-xr-x 12 root root 4096 Jul 20 01:23 aaa9
[root@test01 kuangl]# cd aaa1
[root@test01 aaa1]# ll
total 40
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb1
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb10
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb2
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb3
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb4
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb5
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb6
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb7
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb8
drwxr-xr-x 2 root root 4096 Jul 20 01:23 bbb9

1

用例2

列出var目錄下各子目錄佔用磁碟空間的大小。

1
2
3
4
5
6
7

#!/bin/bash
DIR="/var"
cd $DIR
for k in $(ls $DIR)
do
[ -d $k ] && -sh $k
done

說明:
行4,對/var目錄中每一個文件,進行for循環處理。
行6,如果/var下的文件是目錄,則使用 -sh計算該目錄佔用磁碟空間的大小。
測試結果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

[root@test01 scripts]# ./var.sh
276M cache
4.0K cvs
84K db
8.0K empty
4.0K ftp
4.0K games
4.0K gdm
21G lib
4.0K local
16K lock
7.4G log
4.0K logs
0 mail
4.0K nis
4.0K opt
4.0K preserve
336K run
3.7G spool
212K tmp
4.1G www
4.0K yp

❷ cmd中for循環怎麼寫

你這界面是powershell吧,不是cmd,這兩個東西語法不一樣的,你可以打個ls看看,如果能看到執行就是powershell的,如果不能那就是cmd,你說的for /l 這種是cmd下的寫法,在powershell中則是跟編程語言差不多,類似於
for($x=1; $x -lt 10; $x=$x+1)

{
echo $x

}

❸ 如何在linux命令行中循環執行命令

1、for FILE in $(ls); do [COMMAND]; done
2、for a in {1..100}; do echo $RANDOM; done
3、for (( c=1; c<=5; c++ )); do echo $RANDOM; done
4、for ((c=1; c<21; c+=2)); do echo "Welcome $c times" ; done
5、for line in $(cat user.txt); do getent shadow $line; done
6、for FILE in $(cat file); do tar zcf $FILE.tar.gz $FILE;rm -rf $FILE; done
7、# awk計算所有行所有區域的總和
awk '{for (i=1; i<=NF; i++) s=s+$i}; END{print s}'

❹ BAT批處理文件for循環的基本格式方法

你還在為不知道BAT批處理文件for循環的基本格式方法而煩惱么?接下來是我為大家收集的BAT批處理文件for循環的基本格式方法教程,希望能幫到大家。
BAT批處理文件for循環的基本格式方法
一,基本格式

對一組文件中的每一個文件執行某個特定命令。

FOR %variable IN (set) DO command [command-parameters]

%variable 指定一個單一字母可替換的參數。

(set) 指定一個或一組文件。可以使用通配符。

command 指定對每個文件執行的命令。

command-parameters

為特定命令指定參數或命令行開關。

在批處理程序中使用 FOR 命令時,指定變數請使用 %%variable

而不要用 %variable。變數名稱是區分大小寫的,所以 %i 不同於 %I.

參數:for有4個參數 /d /l /r /f 他們的作用在下面的例子中講解

二,參數/d

FOR /D %variable IN (set) DO command [command-parameters]

如果集中包含通配符,則指定與目錄名匹配,而不與文件名匹配。

例如:

@echo off

for /d %%i in (c:*) do echo %%i

pause

運行後, 會把c盤根目錄下的全部目錄列印出來, 不會列印文件

例子:

@echo off

for /d %%i in (???) do echo %%i

pause

會把當前目錄下有目錄名字只有1-3個字母的,就會顯示出來,沒有就不顯示了

* 號表示任意N個字元,而?只表示任意一個字元

三,參數/r

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

檢查以 [drive:]path 為根的目錄樹,指向每個目錄中的 FOR 語句。

如果在 /R 後沒有指定目錄規范,則使用當前目錄。如果集僅為一個單點(.)字元,

則枚舉該目錄樹。

/r 可以把當前或者你指定路徑下的文件名全部讀取,注意是文件名字,

注意2點:

1.set中的文件名如果含有通配符(?或*),則列舉/r參數指定的目錄及其下面的所有子目錄中和set相符合的所有文件,無相符文件的目錄則不列舉

2.相反,如果set中為具體文件名,不含通配符,則列舉該目錄樹,而不管set中的指定文件是否存在

例子:

@echo off

for /r d: %%i in (*.exe) do echo %%i

pause

將把d盤里以exe結尾的文件全部列出來

@echo off

for /r d: %%i in (boot.ini) do echo %%i

pause

列舉d盤中存在boot.ini文件的目錄

四。

FOR /L %variable IN (start,step,end) DO command [command-parameters]

該集表示以增量形式從開始到結束的一個數字序列。因此,(1,1,5)將產生序列

1 2 3 4 5,(5,-1,1)將產生序列(5 4 3 2 1)

start 為起始值,stup為增量,end結束值,

例子:

@echo off

for /l %%i in (1,1,5) do echo %%i

pause

將會列出12345 這幾個值

@echo off

for /l %%i in (1,1,5) do start cmd

pause

會打開5個cmd的窗口

五,參數/F

迭代及文件解析

使用文件解析來處理命令輸出,字元串及文件內容,使用迭代變數定義要檢查的內容或字元串,並使用各種option選項來進一步

修改解析方式,使用options令牌選項指定那些令牌應該作為迭代變數傳遞

注意:在沒有使用令牌選項時,/f將只檢查第一個令牌

文件解析過程包括讀取輸出,字元串或文件內容,將其分成獨立的文本行以及在將每行解析成零個或更多個令牌

讓後通過設置為令牌的迭代變數值,調用for循環,默認情況下,/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]

帶引號的字元串“options”包括一個或多個

指定不同解析選項的關鍵字,這些關鍵字為:

eol=c 指定一個注釋字元的結尾(就一個)

skip=n 指在文件開始時忽略的行數

delims=xxx 指定分隔符集,這個替換了空格和跳格鍵的默認分隔符集

tokens=x,y,m-n 指每行的哪一個符合被傳遞到每個迭代的for本身,這回倒是額外名稱的分配,m-n格式為一個范圍

通過nth符號指定mth,如果符號字元串中的最好一個字元星號,那麼額外的變數將在最好一個符號解析之後分配並接受行的保留文本,

經過測試,該參數最多隻能區分31個欄位

usebackq 指定新語法已在下類情況中使用:

在作為命令執行一個後引號的字元串並且一個單

引號字元為文字字元串命令並允許在 file-set

中使用雙引號擴起文件名稱。

例子:

@echo off

rem 首先建立臨時文件,用完刪除>test.txt

echo ;注釋行,這個是臨時文件,用完刪除>text.txt

echo 11 12 13 14 15 16 >> test.txt

echo 21,22,23,24,25,26 >> test.txt

echo 31-32-33-34-35-36 >> test.txt

for /F "eol=; tokens=1,3* delims=,- " %%i in (test.txt) do echo %%i %%j %%k

pause

del text.txt

運行......

解釋:

eol=; 分號開頭的行章節附註釋行

tokens=1,3- 將每行第1段,第3段和剩餘地段分別賦予變數%%i,%%j,%%k

delims=,- (減號後有一空格)以逗號減號和空格為分隔符,空格必須放在最後

例子:

@echo off

for /f "skip=4 delims=" %%i in ('net user') do echo %%i

pause

這樣你本機全部賬號名字就出來了把括弧內的內容用兩個單引號起來就表示那個當命令執行,for會返回命令的沒行結果,加那個"delims=" 是為了讓空格的行能正行顯示出來,不加就默認只顯示空格左邊一列,應為默認的分隔符為空格或叫跳格鍵。

看了“BAT批處理文件for循環的基本格式方法”還想看:

1. 批處理文件

2. bat命令怎麼批處理

3. bat批處理命令

4. 常用的文件格式集錦

5. bat批處理文件顯示亂碼怎麼辦

❺ dos 中的for循環怎麼用

FOR這條命令基本上都被用來處理文本,我們這次除了要說他處理文本的作用外還要講他的其他一些好用的功能!
看看他的基本格式(這里我引用的是批處理中的格式,直接在命令行只需要一個%號)
FOR 參數 %%變數名 IN (相關文件或命令) DO 執行的命令 參數:FOR有4個參數 /d /l /r /f 他們的作用我在下面用例子解釋
%%變數名 :這個變數名可以是單個的小寫a-z或者大寫A-Z,他們區分大小寫哦~, FOR會把每個讀取到的值給他!
IN:命令的格式,照寫就是了!
(相關文件或命令) :FOR要把什麼東西讀取然後賦值給變數,不懂的話看下面的例子
do:命令的格式,照寫就是了!
執行的命令:對每個變數的值要執行什麼操作就寫在這.
看不懂我的這些說明,可以在CMD輸入for /?看系統提供的幫助!我這里也給出來吧,大家對照
FOR %%variable IN (set) DO command [command-parameters]
%%variable 指定一個單一字母可替換的參數。
(set) 指定一個或一組文件。可以使用通配符。
command 指定對每個文件執行的命令。
command-parameters
為特定命令指定參數或命令行開關。現在開始講每個參數的意思一、參數 /d
FOR /D %variable IN (set) DO command [command-parameters]
如果集中包含通配符,則指定與目錄名匹配,而不與文件
名匹配。
如果 Set (也就是我上面寫的 "相關文件或命令") 包含通配符(* 和 ?),將對與 Set 相匹配的每個目錄(而不是指定目錄中的文件組)執行指定的 Command。
這個參數主要用於目錄搜索,不會搜索文件,看這樣的例子
@echo off
for /d %%i in (c:\*) do echo %%i
pause
運行會把C盤根目錄下的全部目錄名字列印出來,而文件名字一個也不顯示!
在來一個,比如我們要把當前路徑下文件夾的名字只有1-3個字母的打出來
@echo off
for /d %%i in (???) do echo %%i
pause
這樣的話如果你當前目錄下有目錄名字只有1-3個字母的,就會顯示出來,沒有就不顯示了
這里解釋下*號和?號的作用,*號表示任意N個字元,而?號只表示任意一個字元
知道作用了,給大家個思考題目!
@echo off
for /d %%i in (window?) do echo %%i
pause
保存到C盤下執行,會顯示什麼呢?自己看吧! 顯示:windows
/D參數只能顯示當前目錄下的目錄名字,這個大家要注意!二、參數 /R
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
檢查以 [drive:]path 為根的目錄樹,指向每個目錄中的
FOR 語句。如果在 /R 後沒有指定目錄,則使用當前
目錄。如果集僅為一個單點(.)字元,則枚舉該目錄樹。遞歸
上面我們知道,/D只能顯示當前路徑下的目錄名字,那麼現在這個/R也是和目錄有關,他能幹嘛呢?放心他比/D強大多了!
他可以把當前或者你指定路徑下的文件名字全部讀取,注意是文件名字,有什麼用看例子!
請注意2點:
1、set中的文件名如果含有通配符(?或*),則列舉/R參數指定的目錄及其下面的所用子目錄中與set相符合的所有文件,無相符文件的目錄則不列舉。
2、相反,如果set中為具體文件名,不含通配符,則枚舉該目錄樹(即列舉該目錄及其下面的所有子目錄),而不管set中的指定文件是否存在。這與前面所說的單點(.)枚舉目錄樹是一個道理,單點代表當前目錄,也可視為一個文件。
例:
@echo off
for /r c:\ %%i in (*.exe) do echo %%i
pause
咱們把這個BAT保存到D盤隨便哪裡然後執行,我會就會看到,他把C盤根目錄,和每個目錄的子目錄下面全部的EXE文件都列出來了!!!!
例:
@echo off
for /r %%i in (*.exe) do @echo %%i
pause
參數不一樣了吧!這個命令前面沒加那個C:\也就是搜索路徑,這樣他就會以當前目錄為搜索路徑,比如你這個BAT你把他放在d:\test目錄下執行,那麼他就會把D:\test目錄和他下面的子目錄的全部EXE文件列出來!!!
例:
@echo off
for /r c:\ %%i in (boot.ini) do echo %%i
pause
運行本例發現枚舉了c盤所有目錄,為了只列舉boot.ini存在的目錄,可改成下面這樣:
@echo off
for /r c:\ %%i in (boot.ini) do if exist %%i echo %%i
pause
用這條命令搜索文件真不錯。。。。。。
這個參數大家應該理解了吧!還是滿好玩的命令!三、參數 /L
FOR /L %variable IN (start,step,end) DO command [command-parameters]
該集表示以增量形式從開始到結束的一個數字序列。
因此,(1,1,5) 將產生序列 1 2 3 4 5,(5,-1,1) 將產生
序列 (5 4 3 2 1)。
使用迭代變數設置起始值 (Start#),然後逐步執行一組范圍的值,直到該值超過所設置的終止值 (End#)。/L 將通過對 Start# 與 End# 進行比較來執行迭代變數。如果 Start# 小於 End#,就會執行該命令。如果迭代變數超過 End#,則命令解釋程序退出此循環。還可以使用負的 Step# 以遞減數值的方式逐步執行此范圍內的值。例如,(1,1,5) 生成序列 1 2 3 4 5,而 (5,-1,1) 則生成序列 (5 4 3 2 1)。語法是:
看著這說明有點暈吧!咱們看例子就不暈了!
@echo off
for /l %%i in (1,1,5) do @echo %%i
pause
保存執行看效果,他會列印從1 2 3 4 5 這樣5個數字
(1,1,5)這個參數也就是表示從1開始每次加1直到5終止!
等會暈,就列印個數字有P用...好的滿足大家,看這個例子
@echo off
for /l %%i in (1,1,5) do start cmd
pause
執行後是不是嚇了一跳,怎麼多了5個CMD窗口,呵呵!如果把那個 (1,1,5)改成 (1,1,65535)會有什麼結果,我先告訴大家,會打開65535個CMD窗口....這么多你不死機算你強!
當然我們也可以把那個start cmd改成md %%i 這樣就會建立指定個目錄了!!!名字為1-65535
看完這個被我賦予破壞性質的參數後,我們來看最後一個參數
四、參數 /F
\迭代及文件解析
使用文件解析來處理命令輸出、字元串及文件內容。使用迭代變數定義要檢查的內容或字元串,並使用各種options選項進一步修改解析方式。使用options令牌選項指定哪些令牌應該作為迭代變數傳遞。請注意:在沒有使用令牌選項時,/F 將只檢查第一個令牌。
文件解析過程包括讀取輸出、字元串或文件內容,將其分成獨立的文本行以及再將每行解析成零個或更多個令牌。然後通過設置為令牌的迭代變數值,調用 for 循環。默認情況下,/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]
帶引號的字元串"options"包括一個或多個
指定不同解析選項的關鍵字。這些關鍵字為:
eol=c - 指一個行注釋字元的結尾(就一個)
skip=n - 指在文件開始時忽略的行數。
delims=xxx - 指分隔符集。這個替換了空格和跳格鍵的
默認分隔符集。
tokens=x,y,m-n - 指每行的哪一個符號被傳遞到每個迭代
的 for 本身。這會導致額外變數名稱的分配。m-n
格式為一個范圍。通過 nth 符號指定 mth。如果
符號字元串中的最後一個字元星號,
那麼額外的變數將在最後一個符號解析之後
分配並接受行的保留文本。
usebackq - 使用後引號(鍵盤上數字1左面的那個鍵`)。
未使用參數usebackq時:file-set表示文件,但不能含有空格
雙引號表示字元串,即"string"

❻ Windows批處理-for命令詳解

摘自Windows XP的幫助文檔。

For對一組文件中的每個文件運行指定的命令。

語法

for {%variable|%%variable} in (set) do command [ CommandLineOptions]

參數

{%variable|%%variable}

必需。代表可替換的參數。使用 %variable 通過命令提示符執行 for 命令。使用 %%variable 在批處理文件中執行 for 命令。變數要區分大小寫,並且必須用 Alpha 值表示,例如,%A、%B 或 %C。

(set)

必需。指定要用指定命令處理的一個或多個文件、目錄、數值范圍以及文本字元串。需要括弧。

command

必需。指定要對包括在指定 (set) 中的每個文件、目錄、數值范圍以及文本字元串所執行的命令。

CommandLineOptions

指定要通過指定命令使用的任何命令行選項。

/?

在命令提示符顯示幫助。

注釋

使用 for

可以在批處理文件中或直接從命令提示符使用 for 命令。

使用批處理參數

下列屬性適用於 for 命令:

for 命令使用指定 set 中的每個文本字元串替換 %variable 或 %%variable,直到 command 處理所有文件為止。

記住,for variable名是區分大小寫、全局的,並且每次總共不超過 52 個是活動的。

要避免批處理參數從 %0 到 %9 混淆,對 variable 可以使用除數字 0 到 9 之外的任何字元。對於簡單的批處理文件,單個字元即可奏效,例如 %%f。

在復雜的批處理文件中可以使用 variable 的多個值來區分不同的可替換變數。

顯示一組文件

set 參數可以代表單個或多個文件組。可以使用通配符(即,* 和 ?)指定文件組。以下為有效文件組:

(*.doc)

(*.doc *.txt *.me)

(jan*.doc jan*.rpt feb*.doc feb*.rpt)

(ar??1991.* ap??1991.*)

在使用 for 命令時,set 中的第一個值代替 %variable 或 %%variable,然後由指定的命令處理該值。這一直會繼續下去,直到處理完與 set 值相對應的所有文件(或文件組)為止。

使用 in 和 do 關鍵字

In 和 do 不是參數,但必須將它們與 for 一起使用。如果省略其中任何一個關鍵字,就會出現錯誤消息。

使用 for 的其它形式

如果命令擴展名處於啟用狀態(即,默認設置),則支持 for 的下列其它形式:

僅為目錄

如果 set 包含通配符(* 和 ?),則為匹配 set 的每個目錄(而不是指定目錄中的文件組)而執行指定的 command。語法是:

for /D {%% | %}variable in (set) do command [CommandLineOptions]

遞歸

進入根目錄樹 [Drive:]Path,在樹的每個目錄中執行 for 語句。如果在 /R 後沒有指定目錄,則假定為當前目錄。如果 set 只是一個句號 (.),則只列舉目錄樹。語法是:

for /R [[Drive :]Path] {%% | %}variable in (set) do command [CommandLineOptions]

重復數值范圍

使用迭代變數設置起始值 (start#) ,然後一步步執行一系列設置范圍的值,直到該值超過設置的終止值 (end#)。/L 將通過對 start# 與 end# 進行比較,執行迭代變數。如果 start# 小於 end#,就會執行該命令。如果迭代變數超過 end#,則命令解釋程序退出此循環。也可以使用負 step# 以遞減數值的方式一步步執行此范圍內的值。例如,(1,1,5) 生成順序 1 2 3 4 5,而 (5,-1,1) 則生成順序 (5 4 3 2 1)。語法是:

for /L {%% | %}variable in (start#,step#,end#) do command [CommandLineOptions]

重復和文件解析

使用文件解析過程處理命令輸出、字元串和文件內容。使用迭代變數定義要檢查的內容或字元串,以及使用各種 ParsingKeywords 選項進一步修改解析方式。使用 ParsingKeywords 令牌選項指定哪些令牌應該傳遞為迭代程序變數。注意:在沒有使用令牌選項時,/F 將僅檢查第一個令牌。

文件解析過程包括讀取輸出、字元串或文件內容、分成獨立的文本行及然後將每行解析成零個或更多個令牌。然後通過設置為令牌的迭代程序變數值,調用 for 循環。默認情況下,/F 傳遞每個文件每一行的第一個空白分隔符號。跳過空行。語法的不同點為:

for /F ["ParsingKeywords"] {%% | %}variable in (filenameset) do command [CommandLineOptions]

for /F ["ParsingKeywords"] {%% | %}variable in ("LiteralString") do command [CommandLineOptions]

for /F ["ParsingKeywords"] {%% | %}variable in ('command') do command [CommandLineOptions]

filenameset 參數指定一個或多個文件名稱。在繼續到 filenameset 中的下一個文件之前,每個文件都會被打開、讀取和處理。要覆蓋默認解析行為,指定 "ParsingKeywords"。這是一個引用字元串,它包含一個或多個關鍵字以指定不同的解析選項。

如果使用 usebackq 選項,請使用如下語法之一:

for /F ["usebackqParsingKeywords"] {%% | %}variable in ("filenameset") do command [CommandLineOptions]

for /F ["usebackqParsingKeywords"] {%% | %}variable in ('LiteralString') do command [CommandLineOptions]

for /F ["usebackqParsingKeywords"] {%% | %}variable in (`command`) do command [CommandLineOptions]

下表列出可以用於 ParsingKeywords 的解析關鍵字。

關鍵字 說明

eol=c 指定行尾字元(只一個字元)。

skip=n 指定在文件的開頭跳過的行數。

delims=xxx 指定定界符集合。這將替換空格和製表符的默認分隔符集。

tokens=x,y,m-n 指定將哪些令牌從每行傳遞到每個迭代的 for 正文。結果就分配了附加變數名稱。m-n 格式是一個范圍,指定從 mth 到 nth 的令牌。如果 tokens=字元串中最後一個字元是星號 (*),則將分配附加的變數,並在解析的最後一個令牌後在行上接收剩餘的文本。

usebackq 指定可以使用引號引用 filenameset 中的文件名稱,將後面帶有引號的字元串作為一個命令執行,而帶有單引號的字元串是文字字元串命令。

變數替換

已經增強了 for 變數引用的替換修改程序。下表列出可選語法(對於任意變數 I)。

帶有修改程序的變數 說明

%~I 展開刪除任何前後引號 ("") 的 %I。

%~fI 將 %I 展開到完全合格的路徑名。

%~dI 只將 %I 展開到驅動器號。

%~pI 只將 %I 展開到路徑。

%~nI 只將 %I 展開到文件名

%~xI 只將 %I 展開到文件擴展名。

%~sI 展開路徑以只包含短名稱。

%~aI 將 %I 展開到文件的文件屬性。

%~tI 將 %I 展開到文件的日期和時間。

%~zI 將 %I 展開到文件大小。

%~$PATH:I 搜索 PATH 環境變數所列出的目錄,並將 %I 展開到第一個找到的完全合格的名稱。如果沒有定義環境變數名稱,或搜索沒有找到文件,則此修改程序擴展成空字元串。

下表列出可用來獲得綜合結果的修改程序組合。

變數(使用組合的修改程序) 說明

%~dpI 只將 %I 展開到驅動器號和路徑。

%~nxI 只將 %I 展開到文件名和擴展名。

%~fsI 將 %I 展開到只包含短名稱的完整路徑名。

%~dp$PATH:I 在 PATH 環境變數中所列出的目錄中搜索 %I,並展開到第一個找到結果的驅動器號和路徑。

%~ftzaI 將 %I 展開到輸出行(如 dir一樣)。

在上述範例中,可以用其它有效值替換 %I 和 PATH。有效的 for 變數名終止 %~ syntax。

使用大寫變數名(例如 %I),可以使代碼更具可讀性,並且避免與不區分大小寫的修改程序混淆。

解析字元串

通過將 Filenameset 包括在圓括弧內,並且外面再帶上單引號(即,'filenameset'),可以使用 for /F 對直接字元串解析邏輯。將 Filenameset 視為從某個文件輸入的單行,然後接受解析。

解析輸出

通過將圓括弧之間的 filenameset 變為後面帶有引號的字元串,可以利用 for /F 命令解析命令輸出。將它作為命令行,此命令被傳遞給子 Cmd.exe,並將輸出捕獲到內存並進行解析,就象它是一個文件一樣。

範例

要在批處理文件中使用 for,請使用以下語法:

for %%variable in (set) do command [CommandLineOptions]

要通過使用可替換變數 %f 顯示當前目錄中擴展名為 .doc 或 .txt 的所有文件的內容,請鍵入:

for %f in (*.doc *.txt) do type %f

在前述範例中,當前目錄中擴展名為 .doc 或 .txt 的每個文件都被替代為變數 %f ,直到每個文件的內容都顯示為止。要在批處理文件中使用該命令,只需使用 %%f 替換 %f 的每個事件。否則忽略此變數,並顯示一條錯誤消息。

要解析文件,同時忽略注釋行,請鍵入:

for /F "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k

這個命令解析 myfile.txt 文件的每一行,忽略以分號開頭的行,將第二和第三個令牌從各行傳遞到 FOR 正文(令牌通過逗號或空格分隔)中。FOR 語句的正文引用 %i 以獲得第二個令牌,引用 %j 以獲得第三個令牌,引用 %k 以獲得其餘全部令牌。如果您提供的文件名包含空格,請使用引號將文本引起來(例如,"File Name")。要使用引號,必須使用 usebackq。否則,就將引號解釋為定義要解析的文字字元串。

要通過將 filenameset 放在括弧之間來解析命令輸出,請鍵入:

for /F "usebackq delims==" %i IN (`set`) DO @echo %i

這個範例列舉當前環境中的環境變數名。

閱讀全文

與命令行for循環相關的資料

熱點內容
手機文件壓縮出錯 瀏覽:516
如何登錄毒app 瀏覽:834
汽車中控台加密 瀏覽:862
海南農村信用社app如何開通簡訊 瀏覽:809
phpdns緩存 瀏覽:415
ipad騰訊視頻app如何播放本地視頻 瀏覽:990
蝦米伺服器關閉如何找到以前的歌 瀏覽:18
php自動建站 瀏覽:475
命令與征服3游俠網 瀏覽:970
騰訊雲買哪個地區伺服器 瀏覽:249
香港哪裡有app賣內地零食 瀏覽:683
編譯內核找不到工具鏈 瀏覽:453
java常見模式 瀏覽:504
典欣空調壓縮機 瀏覽:425
app如何認定許可權 瀏覽:854
兩個復數相除的角度計演算法則 瀏覽:590
電商類app開發怎麼收費 瀏覽:304
打造電子書反編譯工具 瀏覽:79
壓縮比115 瀏覽:562
pdf怎麼摳圖 瀏覽:870