cmd for 用法


1:for命令及變量 基本格式: 
FOR /參數 %variable IN (set) DO command [command_parameters] %variable:指定一個單一字母可替換的參數,如:%i ,而指定一個變量則用:%%i ,而調用變量時用:%i% ,變量是區分大小寫的(%i 不等於 %I)。 
批處理每次能處理的變量從%0—%9共10個,其中%0默認給批處理文件名使用,%1默認為使用此批處理時輸入的的第一個值,同理:%2—%9指輸入的第2-9個值;例:net use 
\\ip\ipc$ pass /user:user 中ip為%1,pass為%2 ,user為%3

(set):指定一個或一組文件,可使用通配符,如:(D:\user.txt)和(1 1 254)(1 -1 254),{ “(1 1 254)”第一個"1"指起始值,第二個"1"指增長量,第三個"254"指結束值,即:從1到254;“(1 -1 254)”說明:即從254到1 }

command:指定對第個文件執行的命令,如:net use命令;如要執行多個命令時,命令這間加:& 來隔開 
command_parameters:為特定命令指定參數或命令行開關

IN (set):指在(set)中取值;DO command :指執行command

參數:/L 指用增量形式{ (set)為增量形式時 };/F 指從文件中不斷取值,直到取完為止{ (set)為文件時,如(d:\pass.txt)時 }。 
用法舉例: 
@echo off 
echo 用法格式:test.bat *.*.* > test.txt

for /L %%G in (1 1 254) do echo %1.%%G >>test.txt & net use \\%1.%%G /user:***istrator | find "命令成功完成" >>test.txt 
存為test.bat 說明:對指定的一個C類網段的254個IP依次試建立***istrator密碼為空的IPC$連接,如果成功就把該IP存在test.txt中。

/L指用增量形式(即從1-254或254-1);輸入的IP前面三位:*.*.*為批處理默認的 %1;%%G 為變量(ip的最后一位);& 用來隔開echo 和net use 這二個命令;| 指建立了ipc$后,在結果中用find查看是否有"命令成功完成"信息;%1.%%G 為完整的IP地址;(1 1 254) 指起始值,增長量,結止值。 
@echo off 
echo 用法格式:ok.bat ip 
FOR /F %%i IN (D:\user.dic) DO smb.exe %1 %%i D:\pass.dic 200 
存為:ok.exe 說明:輸入一個IP后,用字典文件d:\pass.dic來暴解d:\user.dic中的用戶密碼,直到文件中值取完為止。%%i為用戶名;%1為輸入的IP地址(默認)。

for 命令 /f 參數

假設a.txt某一行的內容是 111,222.333 444/555
for /f "skip=1 tokens=1,2* delims= " %%a in (a.txt) do echo %%a %%b %%c
skip=      tokens=        delims=
這三項是用的最多的,根據需要.可以不用,可以一起使用,也可以只使用一個或兩個.
但是不管使用幾個都要用引號將它們擴起來.當然不使用時,自然就不需要引號了.

skip=
for循環文本內容是以行為單位,從上至下進行的,skip=1意識就是跳過文本的第一行,即不循環第一行
那么skip=2 自然就是跳過前兩行了,依次類推.........
delims=
delims=后面的字符是將文本每一行的內容以delims=后面的字符分割成若干列.
for /f "tokens=1-5 delims=,./ " %%a in (a.txt) do echo %%a %%b %%c %%d %%e
顯示結果是 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=后面的字符為分割符,將文本內容分成了多列,那么你需要的是哪

些列呢?

如上例:
通過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 又會顯示222 444
若是第一個%%a把它改為%%i也是一樣,那么第二列就是%%j...%%k...依此類推....
明白了?就是按英文字母的順序依此類推的.

如果用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
只要將()里的字符串用引號擴起來,for就會把它當字符串來循環,而不是文本.
for /f "tokens=1,3* delims=,./ " %%a in ("111,222.333 444/555") do echo %%a %%b %%c
按分隔符將字符串分段后,取第1、3、4-5三段分別作為%%a %%b %%c

for /f "tokens=1,3* delims=,./ " %a in ("111,222.333 444/555") do echo %a %b %c %d %e
結果顯示111 333 444/555 %d %e

請問如何單獨取出文本中某一行含有IP的的"[ ]"之間的內容
<title> 您的IP地址 </title>
</head>
<body style="margin:0px"><center>您的IP地址是:[124.88.120.123] </center></body></html>
[mode/]
代碼
@echo off
for /f "tokens=2 delims=[]" %%a in ('findstr "您的IP地址是:" ip.asp') do (
echo %%a
)
pause

 

for %%i in (1 2 3 4 5) do echo %%i

帶參數 /L 的for (這里的 參數/L 可以理解為 "list" 的意思,代表一個數列)
for /l %%i in (1 1 5) do echo %%i
然后運行,可以發現屏幕上顯示1 2 3 4 5(每字一行)

/D參數(常用來查詢 當前目錄 或者 指定目錄的文件夾)
如:查詢F盤根目錄下的文件夾
for /d %%i in (f:\*) do echo %%i
如果省略 括號中的 "f:\",則會直接查詢 批處理 所在目錄的文件夾

2> /r參數
基本用法:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
檢查以 [drive:]path 為根的目錄樹中,所有符合(set)的文件或者文件夾。如果在 /R 后沒有指定目錄,則使用當前目錄。
for /r f:\ %%i in (*) do echo %%i
for /r f:\ %%i in (*.bat) do echo %%i
枚舉F:盤下所有的文件(所有*.bat文件,包括子目錄)

 

 

 

2:if命令及變量 基本格式:

if主要用來判斷,1、兩個“字符串”是否相等;2、兩個數值比較,然后執行相應的命令。
當然還有特殊用法,如結合errorlevel:if errorlevel 1 echo error
或者結合defined(定義的意思):if defined test (echo It is defined) else echo It isn't efined

示例:
1、檢測字符串(注意,用if檢測字符串是否相等的時候,后面用的不是“=”,而是“==”)
set "str=this is a test"
REM 檢測變量%str%是否等於test,如果相等,顯示OK,否則顯示NO
if "%str%"=="test" (echo OK) else echo NO
2、檢測數值:(注意,批處理中大於符號不能用:“>”,而用"gtr",其它的也類似)
比較運算符一覽:
EQU - 等於
NEQ - 不等於
LSS - 小於
LEQ - 小於或等於
GTR - 大於
GEQ - 大於或等於
檢測數值 20 是否大於 15
set /a num1=20
set /a num2=15
if %num1% gtr %num2% echo %num1%大於%num2%
if %num1% EQU %num2% echo %num1%等於%num2%
if %num1% LSS %num2% echo %num1%小於%num2%
3、if結合errorlevel使用:
說明:環境變量errorlevel的初始值為0,當一些命令執行不成功,就會返回一個數值,如:1 ,2 等
XCOPY F:\test.bat D:\ 
IF ERRORLEVEL 1 ECHO 文件拷貝失敗 
IF ERRORLEVEL 0 ECHO 成功拷貝文件 如果文件拷貝成功,屏幕就會顯示“成功拷貝文件”,否則就會顯示“文件拷貝失敗”。 
IF ERRORLEVEL 是用來測試它的上一個DOS命令的返回值的,注意只是上一個命令的返回值,而且返回值必須依照從大到小次序順序判斷。

4、if還有一個特殊的用法就是可以用來檢測某個變量是否已經被定義
示例:
set "str1=ok"
set "str2=no"
if defined str1 echo str1已經被定義
if defined str2 echo str2已經被定義
if defined str3 (echo str3已經被定義) else echo str3 沒有被定義

IF [not] errorlevel 數字 命令語句 如果程序運行最后返回一個等於或大於指定數字的退出編碼,指定條件為“真”。 
例:IF errorlevel 0 命令 指程序執行后返回的值為0時,就值行后面的命令;IF not errorlevel 1 命令指程序執行最后返回的值不等於1,就執行后面的命令。 
0 指發現並成功執行(真);1 指沒有發現、沒執行(假)。 
IF [not] 字符串1==字符串2 命令語句 如果指定的文本字符串匹配(即:字符串1 等於 字符串2),就執行后面的命令。 
例:“if "%2%"=="4" goto start”指:如果輸入的第二個變量為4時,執行后面的命令(注意:調用變量時就%變量名%並加" ") 
IF [not] exist 文件名 命令語句 如果指定的文件名存在,就執行后面的命令。 
例:“if not nc.exe goto end”指:如果沒有發現nc.exe文件就跳到":end"標簽處。 
IF [not] errorlevel 數字 命令語句 else 命令語句或 IF [not] 字符串1==字符串2 命令語句 else 命令語句或 IF [not] exist 文件名 命令語句 else 命令語句 加上:else 命令語句后指:當前面的條件不成立時,就指行else后面的命令。注意:else 必須與 if 在同一行才有效。 當有del命令時需把del命令全部內容用< >括起來,因為del命令要單獨一行時才能執行,用上< >后就等於是單獨一行了;例如:“if exist test.txt. <del test.txt.> else echo test.txt.missing ”,注意命令中的“.”


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM