搜索 社区服务 统计排行 帮助
  • 884阅读
  • 5回复

[请教].bat里面是不是for是怎么用的?批处理怎么做,是不是用for?

楼层直达
级别: 新手上路
注册时间:
2004-01-13
在线时间:
0小时
发帖:
658
RT……dos实力不行,想bat压x.264,不会批……

……C4d的CPU啊……7min的片,3pass的1pass十几个小时==!!

……还是超到3.2了(虽然不是很牛……),果然新世纪新生代S级别的...

羊骑车…[/KH]
级别: 版主
注册时间:
2002-12-02
在线时间:
0小时
发帖:
3002
只看该作者 1楼 发表于: 2006-04-08
用 for /? 就有說明了

對一組檔案中的每個檔案執行指定的命令。

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

%variable 指定一個可以取代的參數。
(set) 指定由一或多個檔案組成的檔案組。您可使用通配字元。
command指定命令來執行每一個檔案。
command-parameters
為所指定的命令指定變數或參數。

如果要在批次程式中使用 FOR 命令,請指定 %%variable,而不要指定
%variable。 變數名稱有大小寫的區分,所以 %i 不同於 %I。

如果您啟用擴充命令,則額外支援下列的 FOR 命令
格式:

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

如果 set 中包含萬用字元,則指定與目錄
名稱相符,而不是與檔案名稱相符。

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

在樹狀目錄中切換 [drive:]路徑,並於樹狀目錄的每一個目錄下執行
FOR 陳述式。如果未在 /R 之後指定目錄規格,則採用目前的目錄。
如果 set 只是單一句點 (.) 字元,則它只會列舉樹狀目錄結構。

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

set 是從開頭到結尾一次跳一步的連續數字。所以 (1,1,5) 會產生
連續值 (1 2 3 4 5) 而 (5,-1,1) 會產生連續值 (5 4 3 2 1)

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]

filenameset 可以是一個以上的檔案名稱。每個檔案都已開啟,
讀取及處理過,才繼續進行下個檔案名稱組。處理檔案讀取的一致
性,將它分成獨立的文字行,然後將每一行分析成零或更多的字串。
用已找到的字串值為變數值,來呼叫 For 迴圈的內容。預設狀態,
/F 傳出每個檔案的每一行中,以空格分隔的第一個字串。空白行
會被略過。您可以指定 "options" 參數來覆寫預設的分析行為。
這是有引號的字串,包含一個以上的關鍵字,來指定不同的分析
選項。關鍵字是:

eol=c - 指定一個行尾註解字元
(只有一個)
skip=n - 指定在檔案開頭要掠過的
行數。
delims=xxx - 指定分隔符號的集合。 這會取代
預設的空白與定位字元的分隔符號集合。
tokens=x,y,m-n - 指定每一行的哪些文字串應該被
傳到 for 的內部以用來進行每一個重複操作。
這會導致額外的變數名稱被配置。
m-n 格式代表一個範圍,
指定了第 m 個到第 n 個字串項。
如果在 tokens= 字串的最後一個字元是
星號,則會配置一個額外的變數
來接收最後一個字串項被分析後
的其他文字。
usebackq- 指定新語義開始作用。
其中反括號的字串會被當作命令來執行,
而單引號字串是純文字字串。
此外還允許使用雙引號來
引用在 filenameset 內
的檔名。

以下是一個範例:

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

這會分析 myfile.txt 檔案中的每一行,它不會去管以分號開頭的行數
,直接將第 2 個及第 3 個語法從每一行傳到 for 主體,而其語法是
用逗號和/或空格分開的。請注意,for 主體陳述式參照 %i 以取得第
二個語法,參照 %j 以取得第三個語法,使用 %k 取得第三個語法之
後的剩餘字串。因為檔案名稱含有空格,您必須用雙引號來括住檔案名
稱。要這樣使用雙引號,您必須使用 usebackq 參數。否則雙引號會被
解譯成用來定義一般文字。

使用 %i 明白地在 for 陳述式中宣告,並透過 tokens= option 使用
%j 作暗式性的宣告。您可以藉由 tokens= line 來指定最多 26 個語
法,前提是它宣告的變數不能高於字母 'z' 或 'Z'。請記住,FOR 變
數是單一字元的,同時在任一時間內,您不能同時使用超過 52 個 FOR
變數。

您也可以使用 FOR /F 命令在立即字串中分析邏輯,方法是將括弧之間的
filenameset 變成一個引號字串。它會被視為從檔案輸入的單行,並加
以分析。

最後,您可以使用 FOR /F 命令來分析一個命令的輸出。方法是將括弧
內的 filenameset 變成單引號字串。它將被視為一個命令列,這個命令
行將會傳到子 CMD.EXE,而輸出將會被擷取到記憶體中,當成檔案來分
析。所以下列的範例:

FOR /F "delims==" %i IN ('set') DO @echo %i

將列舉目前環境中的環境變數名稱。

此外,已經加強了 FOR 變數參考的取代功能。
您現在可以選用下列的語法:

%~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 - 為 %I 搜尋所有列在 PATH 環境變數內的目錄
且展開第一個找到的項目為磁碟機代號及
路徑。
%~ftzaI - 展開 %I 為像 DIR 一樣的輸出行

在上面的範例中 %I 和 PATH 能用其他的合法值取代。%~ 語法是由合法的
FOR 變數名稱來終止。如果選用像 %I 的大寫名稱可以增加可讀性而且避免
和修飾元的混淆,因為這些並不區分大小寫。

============

舉個例子
想ping 192.168.0.0~192.168.0.254 之間的 IP

For /L %i in (0,1,254) DO ping 192.168.0.%i

级别: 工作组
注册时间:
2003-08-26
在线时间:
13小时
发帖:
6600
只看该作者 2楼 发表于: 2006-04-08
1、注意for语句如果写在bat文件里,就要双写%,否则会出错。
2、7min的片做1pass用了十几小时?
我闪龙2800+压7分钟的片用半个小时就已经非常了不起了……你那个也慢得太夸张了点吧

催片请点此处: http://bbs.popgo.org/bbs/read.php?tid=502402&displayMode=1#19103164
级别: 新手上路
注册时间:
2004-01-13
在线时间:
0小时
发帖:
658
只看该作者 3楼 发表于: 2006-04-08
……强烈无语……为什么这么慢……

2楼老大……俺看不懂啊……

羊骑车…[/KH]
级别: 侠客
注册时间:
2004-12-15
在线时间:
0小时
发帖:
339
只看该作者 4楼 发表于: 2006-04-08
搞的那么复杂干什么,megui里显示的command line copy出来自己稍微研究研究就会写了。
有必要一定做3pass吗?
级别: 新手上路
注册时间:
2004-01-13
在线时间:
0小时
发帖:
658
只看该作者 5楼 发表于: 2006-04-09
引用
最初由 jumbo 发布
搞的那么复杂干什么,megui里显示的command line copy出来自己稍微研究研究就会写了。
有必要一定做3pass吗?


……但是想批处理,那应该要用一些其他的命令……不会……DOS盲人一个...[/KH]

至于3pass……个人再这个方面的追求比较BT……这个大家54我8[/KH]

羊骑车…[/KH]
快速回复

限150 字节
上一个 下一个