论坛: 菜鸟乐园 标题: 批处理文件中的“FOR”循环的运用问题~~~`` 复制本贴地址    
作者: hyf1230 [hyf1230]    论坛用户   登录
格式FOR [%%f] in (集合) DO [命令]

for后面的%%f是何意义,是不是随便取%*(*代表一个字母),是这样理解吗?


地主 发表时间: 04-02-19 20:02

回复: afan271314 [afan271314]   论坛用户   登录
作  者:miyagi
发表于:2003-1-17
一.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 \\target\ipc$ %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.%i\ipc$ “” /user:“”

/L这个参数是用来控制迭代的。

In()里的集合是一系列按步长量划分的、从头到尾的数字。这样,(1,1,5) 将生成序列 1 2 3 4 5,而 (5,-1,1) 将生成序列 (5 4 3 2 1)。

Do 后的用法同上。看看也能明白意思了吧。

 



[此贴被 真爱有限(afan271314) 在 02月19日21时10分 编辑过]


[此贴被 真爱有限(afan271314) 在 02月19日21时11分 编辑过]

B1层 发表时间: 04-02-19 21:07

回复: angelj517 [angelj517]   论坛用户   登录
不用问一个就见解这么多的拉``看了会偏头痛的拉```

B2层 发表时间: 04-02-19 22:29

论坛: 菜鸟乐园

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号