BAT调用文件配置

BAT调用文件配置,第1张

一.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 后的用法同上。看看也能明白意思了吧。写这篇文章也没什么特别意思,只是怕自己看到的好东西会忘掉。呵呵,不过总是有启发的,不是吗?

其实for用法有很多啊。比如用来添加权限相同的帐号。你就可以先在记事本里写好了运行一个for命令不就ok了。不用一个一个的添加,那样的话还不要累死。当然do后面可以跟更多的参数,可以干更多的类似暴力的事喔。嘿嘿..

很多时候配置文件会用到ini文件,在bat中可以写一个readini函数来读取ini

例如ini文件

读取测试

测试结果


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11597215.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存