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 ”,注意命令中的“.”

时间: 2024-10-01 19:20:09

cmd for 用法的相关文章

wwwscan网站目录文件批量扫描工具

准备一个比赛样题里面给的一个扫描的工具: 不知道怎么用就上网百度了一下果然有关于这个软件的两篇介绍(感觉写的很好),第一篇介绍的应该和我的工具一样,也给了例子(现在Google不能访问了)和参数介绍,第二篇作者可能自己"升级"过软件也提供了下载地址.但是有个问题是:我机器上跑感觉那些多进程.端口和超时等参数都是虚设的,我试验的结果是我的软件只要输入ip或域名就可以运行扫描. ps:直接copy 文章来源:http://blog.chinaunix.net/uid-26726420-id

Linux之时间、地点、人物、事件、情节

时间 date 显示当前时间 time cmd 显示 cmd的运行时间 地点 locate 根据文件名,迅速找到文件.基于系统构建的索引 find 根据各种规则找到文件,更强大,但比较慢 whereis cmd  找到命令所在位置 人物 whoami   显示当前用户名 who 显示登陆到系统的用户 w 显示登陆用户,以及其登陆时间.在运行的程序等 事件 whatis  cmd   一句话概括 cmd命令的作用 man cmd   详细介绍cmd的用法 情节 时间.地点.人物.时间都齐全了,至于

Shell脚本----安装Hadoop过程小结

启动$HADOOP_HOME/bin或者$HADOOP_HOME/sbin下的脚本,shell终端会显示输出信息: 根据输出信息,利用bash -x [script-name]的信息以及脚本本身,可以定位出错误是从什么位置开始的: 以下是在这些过程中,自己遇到的问题,以及是如何解决的: 1.在调用stop-yarn.sh脚本,关闭ResourceManager以及NodeManger的时候,会出现no NodeManager to stop; 但是自己ssh到自己的slave节点,jps之后仍然

irc操作小记

IRC客户端 HexChat 跨平台支持,目前正在Windows上使用,暂无不满意的地方 polari 支持的命令太少了,功能有限. Empathy 重量级,支持各种消息协议 weechat/irssi 命令行界面,其中weechat架构是可扩展的,并且支持当前流行的脚本语言,如python, perl, ruby:同时高度可配置.以后着重在Linux上使用. IRC服务器 用户量最大的,频道最多的应该是freenode,大的开源软件一般在上面都有对应的频道.本文以freenode网络为例,其他

运维自动化之salt笔记

1:saltstack的基本介绍 2:salt的安装 1:服务端1:安装2:配置文件3:运行4:注意事项2:客户端1:安装2:配置文件3:运行4:注意事项 3:salt的使用: 1:基础知识1:targeting2:nodegroup3:grains4:pillar2:状态管理1:state1:state语法2:state的逻辑关系2:highstate3:salt schedule3:实时管理1:cmd.run2:module4:其他1:无master2:peer3:runner4:react

前端入门22-讲讲模块化

声明 本篇内容梳理自以下来源: Github:smyhvae/web JavaScript模块化开发的演进历程 JavaScript模块化七日谈 ES6:Module 的加载实现 CommonJS规范 感谢各位大佬的分享,解惑了很多. 正文-模块化 现在回过头来想想,也许选择以<JavaScript权威指南>一书来作为入门有些不好,因为这本书毕竟是很早之前的,书中所讲的思想.标准也基本都只是 ES5 及那时代的相关技术. 这也就导致了,在书中看到的很多例子,虽然觉得所用到的思想很奇妙,比如临时

前端模块化杂记

更好的阅度体验 前言 CMD\AMD简介 Commonjs简介 Module简介 Common和Module的区别 Module与webpack Module与Babel 一些问题 总结 引用 前言 前端模块化在近几年层出不穷,有Node的CommonJs,也有属于client端的CMD/AMD模式,而ES6本身也出现了Modules,再加上Webpack以及babel的普及,虽然在代码中经常使用到这些用法,但是如果不去深入研究,总觉得是一个黑魔法,无法探测一些问题的根源. AMD/CMD简介

irc 关键操作

IRC 客户端: Textual 5 HexChat  IRC 用户密码常用命令: 用户密码: 忘记密码 如果太长时间没登录IRC,难免会忘记密码,那IRC有重置密码的功能吗?当然有,不过也是通过命令行进行操作的,相当geek:).此功能是服务器通过提供NickServ服务(其实语法上就是一个用户,类似的服务还有ChanServ MemoServ)实现的. 假定需要重置密码的用户名为foo,那首先可以查看下账户信息,可以看到注册时间,最后一次登录时间及IP: /msg NickServ INFO

Python调用系统命令的6种方法

Python调用系统命令的6种方法在Python中调用系统命令一般使用os或者subprocess模块,下面介绍Python中最常用的6种调用系统命令的方法.1.os.system()该函数返回命令执行结果的返回值,system()函数在执行过程中进行了以下三步操作:1.fork一个子进程:2.在子进程中调用exec函数去执行命令:3.在父进程中调用wait(阻塞)去等待子进程结束.返回0表示命令执行成功,其他表示失败.用法:os.system("command")2.os.popen