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/555for /f "skip=1 tokens=1,2* delims= " %%a in (a.txt) do echo %%a %%b %%cskip= 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-51-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 offfor /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 %%ifor /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,否则显示NOif "%str%"=="test" (echo OK) else echo NO2、检测数值:(注意,批处理中大于符号不能用:“>”,而用"gtr",其它的也类似)比较运算符一览:EQU - 等于NEQ - 不等于LSS - 小于LEQ - 小于或等于GTR - 大于GEQ - 大于或等于检测数值 20 是否大于 15set /a num1=20set /a num2=15if %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 ”,注意命令中的“.”