当前位置: 技术问答>linux和unix
for命令的具体使用方法,举例加分!!
来源: 互联网 发布时间:2014-11-30
本文导语: for命令的具体使用方法,举例加分!! | 1。FOR命令是DOS2.0版开始引入并其后各版都存在的一个命令; 2。这一命令的用途,就是用来循环(或重复)执行另一个DOS命令; 3。格式: ...
for命令的具体使用方法,举例加分!!
|
1。FOR命令是DOS2.0版开始引入并其后各版都存在的一个命令;
2。这一命令的用途,就是用来循环(或重复)执行另一个DOS命令;
3。格式:
命令行形式:
FOR [%p] in (set) do [command] [argments]
batch语句:
FOR [%%p] in (set) do [command] [argments]
4。说明:
以上语句中,[command] 代表某个DOS命令,如del、type等等等;
[argments] 是以上命令所需参数,如对del,它可以是任意的文 件名,而对type,则它是一文本文件名;
[argments]通常用其前面的[%p]、[%%p]来
取代,表示要变的。
(set)是一集合,其中的元素将是变量[%p]、[%%p]的取值;
5。举例:
命令行形式:
FOR %f in (text1.bak text2.bak tmp.dat) do del %f
用来删除 text1.bak 、text2.bak、tmp.dat三个文件
batch命令:
FOR %%f in (text1.bak text2.bak tmp.dat) do type %%f
用来TYPE text1.bak 、text2.bak、tmp.dat三个文件的内容
[注]一般DOS书中都在‘批处理命令’一章中介绍此命令,而不在‘常用DOS命令’一章中介绍。我94年翻译的、一本叫《DOS一日通,Learn DOS 6.22 in a day》的小册子中也有此命令,但说的不够详细。
2。这一命令的用途,就是用来循环(或重复)执行另一个DOS命令;
3。格式:
命令行形式:
FOR [%p] in (set) do [command] [argments]
batch语句:
FOR [%%p] in (set) do [command] [argments]
4。说明:
以上语句中,[command] 代表某个DOS命令,如del、type等等等;
[argments] 是以上命令所需参数,如对del,它可以是任意的文 件名,而对type,则它是一文本文件名;
[argments]通常用其前面的[%p]、[%%p]来
取代,表示要变的。
(set)是一集合,其中的元素将是变量[%p]、[%%p]的取值;
5。举例:
命令行形式:
FOR %f in (text1.bak text2.bak tmp.dat) do del %f
用来删除 text1.bak 、text2.bak、tmp.dat三个文件
batch命令:
FOR %%f in (text1.bak text2.bak tmp.dat) do type %%f
用来TYPE text1.bak 、text2.bak、tmp.dat三个文件的内容
[注]一般DOS书中都在‘批处理命令’一章中介绍此命令,而不在‘常用DOS命令’一章中介绍。我94年翻译的、一本叫《DOS一日通,Learn DOS 6.22 in a day》的小册子中也有此命令,但说的不够详细。
|
.for命令格式
对一组文件中的每个文件运行指定的命令。
可以在批处理程序中或直接从命令提示符使用 for 命令。
要在批处理程序中使用 for 命令,请使用以下语法:
for %%variable in (set) docommand [command-parameters]
要在命令提示符下使用 for,请使用以下语法: (区别就是在于变量前的%)
for %variable in (set) do command [command-parameters]
参数
%%variable 或 %variable
代表可替换的参数。for 命令使用在 set 中指定的每个文本字符串替换 %%variable(或 %variable),直到此命令(在 command-parameters 中指定)处理所有的文件为止。使用 %% variable 在批处理程序中执行 for 命令。使用 % variable 通过命令提示符执行 for 命令。变量名区分大小写。
(set)
指定要用指定的命令处理的一个或多个文件或文本字符串。需要括号。
command
指定要在指定的 set 所包含的每个文件上执行的命令。
command-parameters
指定要用于指定命令(如果指定的命令要使用任何参数或开关)的任何参数或开关。
二.for 命令的其他形式
如果启用了命令扩展,将支持如下 for 命令的其他格式:
只限于目录
for /d [%% | %]variable in (set) docommand [command-parameters]
如果 set 包含通配符(* 和 ?),则指定与目录名匹配,而不是文件名。
递归
for /r [[drive :]path] [%% | %]variable in (set) docommand [command-parameters]
进入根目录树[drive:]path,在树的每个目录中执行 for 语句。如果在 /r 后没有指定目录,则假定为当前目录。如果 set 只是一个句号 (.) 字符,则只列举目录树。
迭代
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 (filenameset) do command [command-parameters]
for /f ["options"] [%% | %]variable in ("literal string" do command[command-parameters]
for /f ["options"] [%% | %]variable in (‘command‘) do command [command-parameters]
或者,如果出现 usebackq 选项:
for /f ["options"] [%% | %]variable in (filenameset) do command [command-parameters]
for /f ["options"] [%% | %]variable in (‘literal string‘) do command [command-parameters]
for /f ["options"] [%% | %]variable in (`command`) docommand [command-parameters]
三.for使用范例
显示目录中的文件
假定要使用 type 命令显示当前目录中扩展名为 .doc 或 .txt 的所有文件内容。为此,为了使用可替换变量 %f,请在命令提示符后键入以下命令:
for %f in (*.doc *.txt) do type %f
在此范例中,当前目录中扩展名为 .doc 或 .txt 的每个文件都被替代为变量 %f ,直到每个文件的内容都显示为止。要在批处理文件中使用该命令,只需使用 %%f 替换 %f 的事件。否则,windows 2000 将忽略变量并显示错误信息。
重定向输出到打印机
windows 2000 支持在指定命令中使用的命令开关、管道和重定向。例如,要将上例中的输出重定向到 prn(默认的打印机端口),可以键入下面的命令:
for %f in (*.doc *.txt) do type %f >; prn:
解析文件
要分析文件并忽略注释行,可以使用:
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= option 隐含声明。如果它不会导致尝试声明高于字母“z”或“z”的某个变量,使用 tokens= 行可以指定最多 26 个标记。
记住,for 变量名区分大小写、全局的,并且每次总体不超过 52 个是活动的。
解析字符串
也可以对相邻的字符串使用 for /f 分析逻辑,方法是使括号之间的 filenameset 为一个用单引号引起来的字符串。将它当作文件的单行输入并进行解析。
解析输出
最后,可以使用 for /f 命令来对命令的输出结果进行解析。通过使 filenameset 在反引字符串的括号之间来执行此操作。将它作为命令行,此命令被传递给子 cmd.exe 并将输出捕获到内存并进行解析,就象它是一个文件一样。因此,下面的范例:
for /f "usebackq delims==" %i in (`set`) do @echo %i
这将列举当前环境中的环境变量名。
四.针对网络探测时使用for命令
1. for /f “tokens=1,2*” %i in (filename.txt) do net use \targetipc$ %i /u:%j
呵呵,首先/f的参数的含意是解析文件的意思。这将解析 filename.txt 文件的每一行,将第一和第二个令牌环传递到 for 正文中,令牌环通过逗号和/或空格分隔。注意:for 语句引用 %i 以获得第一个令牌,引用 %j 以获得第二个令牌。(注:我也不大明白令牌在这具体意思,不过可以确定的就是第一个令牌就是每行的第一个字符窜,第二个令牌就是用空格分开的第二个字符窜。呵呵,至于*的意思是这样的,在令牌 = 字符串中最后一个字符是星号,则将分配附加的变量,并在解析最后一个令牌后在行上接收剩余的文本。当然如果txt文本的格式如下,只有每行只有两个字符窜的话就可以省去了。)
filename.txt的内容格式如下:
password username
password administrator
password administrator
password administrator
in ()里添写上需要解析的文本文件名。
do后面则添加需要执行的命令如net use 、net user等。
(是不是有点对administrator暴力跑ipc%,获得密码的味道啊?呵呵,就是字典做的有点累。)
2. for /l %i in(1,1,254) do net use \x.x.x.%iipc$ “” /user:“”
/l这个参数是用来控制迭代的。
in()里的集合是一系列按步长量划分的、从头到尾的数字。这样,(1,1,5) 将生成序列 1 2 3 4 5,而 (5,-1,1) 将生成序列 (5 4 3 2 1)。
do 后的用法同上。看看也能明白意思了吧。写这篇文章也没什么特别意思,只是怕自己看到的好东西会忘掉。呵呵,不过总是有启发的,不是吗?
其实for用法有很多啊。比如用来添加权限相同的帐号。你就可以先在记事本里写好了运行一个for命令不就ok了。不用一个一个的添加,那样的话还不要累死。当然do后面可以跟更多的参数,可以干更多的类似暴力的事喔。嘿嘿...
对一组文件中的每个文件运行指定的命令。
可以在批处理程序中或直接从命令提示符使用 for 命令。
要在批处理程序中使用 for 命令,请使用以下语法:
for %%variable in (set) docommand [command-parameters]
要在命令提示符下使用 for,请使用以下语法: (区别就是在于变量前的%)
for %variable in (set) do command [command-parameters]
参数
%%variable 或 %variable
代表可替换的参数。for 命令使用在 set 中指定的每个文本字符串替换 %%variable(或 %variable),直到此命令(在 command-parameters 中指定)处理所有的文件为止。使用 %% variable 在批处理程序中执行 for 命令。使用 % variable 通过命令提示符执行 for 命令。变量名区分大小写。
(set)
指定要用指定的命令处理的一个或多个文件或文本字符串。需要括号。
command
指定要在指定的 set 所包含的每个文件上执行的命令。
command-parameters
指定要用于指定命令(如果指定的命令要使用任何参数或开关)的任何参数或开关。
二.for 命令的其他形式
如果启用了命令扩展,将支持如下 for 命令的其他格式:
只限于目录
for /d [%% | %]variable in (set) docommand [command-parameters]
如果 set 包含通配符(* 和 ?),则指定与目录名匹配,而不是文件名。
递归
for /r [[drive :]path] [%% | %]variable in (set) docommand [command-parameters]
进入根目录树[drive:]path,在树的每个目录中执行 for 语句。如果在 /r 后没有指定目录,则假定为当前目录。如果 set 只是一个句号 (.) 字符,则只列举目录树。
迭代
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 (filenameset) do command [command-parameters]
for /f ["options"] [%% | %]variable in ("literal string" do command[command-parameters]
for /f ["options"] [%% | %]variable in (‘command‘) do command [command-parameters]
或者,如果出现 usebackq 选项:
for /f ["options"] [%% | %]variable in (filenameset) do command [command-parameters]
for /f ["options"] [%% | %]variable in (‘literal string‘) do command [command-parameters]
for /f ["options"] [%% | %]variable in (`command`) docommand [command-parameters]
三.for使用范例
显示目录中的文件
假定要使用 type 命令显示当前目录中扩展名为 .doc 或 .txt 的所有文件内容。为此,为了使用可替换变量 %f,请在命令提示符后键入以下命令:
for %f in (*.doc *.txt) do type %f
在此范例中,当前目录中扩展名为 .doc 或 .txt 的每个文件都被替代为变量 %f ,直到每个文件的内容都显示为止。要在批处理文件中使用该命令,只需使用 %%f 替换 %f 的事件。否则,windows 2000 将忽略变量并显示错误信息。
重定向输出到打印机
windows 2000 支持在指定命令中使用的命令开关、管道和重定向。例如,要将上例中的输出重定向到 prn(默认的打印机端口),可以键入下面的命令:
for %f in (*.doc *.txt) do type %f >; prn:
解析文件
要分析文件并忽略注释行,可以使用:
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= option 隐含声明。如果它不会导致尝试声明高于字母“z”或“z”的某个变量,使用 tokens= 行可以指定最多 26 个标记。
记住,for 变量名区分大小写、全局的,并且每次总体不超过 52 个是活动的。
解析字符串
也可以对相邻的字符串使用 for /f 分析逻辑,方法是使括号之间的 filenameset 为一个用单引号引起来的字符串。将它当作文件的单行输入并进行解析。
解析输出
最后,可以使用 for /f 命令来对命令的输出结果进行解析。通过使 filenameset 在反引字符串的括号之间来执行此操作。将它作为命令行,此命令被传递给子 cmd.exe 并将输出捕获到内存并进行解析,就象它是一个文件一样。因此,下面的范例:
for /f "usebackq delims==" %i in (`set`) do @echo %i
这将列举当前环境中的环境变量名。
四.针对网络探测时使用for命令
1. for /f “tokens=1,2*” %i in (filename.txt) do net use \targetipc$ %i /u:%j
呵呵,首先/f的参数的含意是解析文件的意思。这将解析 filename.txt 文件的每一行,将第一和第二个令牌环传递到 for 正文中,令牌环通过逗号和/或空格分隔。注意:for 语句引用 %i 以获得第一个令牌,引用 %j 以获得第二个令牌。(注:我也不大明白令牌在这具体意思,不过可以确定的就是第一个令牌就是每行的第一个字符窜,第二个令牌就是用空格分开的第二个字符窜。呵呵,至于*的意思是这样的,在令牌 = 字符串中最后一个字符是星号,则将分配附加的变量,并在解析最后一个令牌后在行上接收剩余的文本。当然如果txt文本的格式如下,只有每行只有两个字符窜的话就可以省去了。)
filename.txt的内容格式如下:
password username
password administrator
password administrator
password administrator
in ()里添写上需要解析的文本文件名。
do后面则添加需要执行的命令如net use 、net user等。
(是不是有点对administrator暴力跑ipc%,获得密码的味道啊?呵呵,就是字典做的有点累。)
2. for /l %i in(1,1,254) do net use \x.x.x.%iipc$ “” /user:“”
/l这个参数是用来控制迭代的。
in()里的集合是一系列按步长量划分的、从头到尾的数字。这样,(1,1,5) 将生成序列 1 2 3 4 5,而 (5,-1,1) 将生成序列 (5 4 3 2 1)。
do 后的用法同上。看看也能明白意思了吧。写这篇文章也没什么特别意思,只是怕自己看到的好东西会忘掉。呵呵,不过总是有启发的,不是吗?
其实for用法有很多啊。比如用来添加权限相同的帐号。你就可以先在记事本里写好了运行一个for命令不就ok了。不用一个一个的添加,那样的话还不要累死。当然do后面可以跟更多的参数,可以干更多的类似暴力的事喔。嘿嘿...
|
我在DOS下用命令来扫描一台主机的多个端口:
for /1 %a in(1,1,65535) do start /low /min telnet 192.168.0.1 %a
你也可以在设置一个参数来扫描同一网段的不同计算机。
for /1 %a in(1,1,65535) do start /low /min telnet 192.168.0.1 %a
你也可以在设置一个参数来扫描同一网段的不同计算机。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。