批处理命令行for语句
for批处理语法
FOR的语法FOR是一个循环命令。所谓的循环指,对一组文件逐一运行一条命令,或对一组文件中的每一个文件执行某个特定命令。FOR常用于循环命令、遍历查询、解析文本等。1、FOR的基本语法格式:FOR /参数 %%I IN (Command1) DO Command2FOR /参数 %%字母 IN (集合) DO 命令 [命令参数]FOR /参数 %%Variable IN (Set) DO Command [Command-Parameters](注意:这三条命令的语法格式都一致,只是表示方式不同而已。一般情况下,本教程采用第一条表达,采用第二条讲解,采用第三条补充。)2、用法:一句话总结:从集合中依次逐一提取变量执行后面的命令。FOR—IN—DO这是FOR命令的基本结构,三个基本组成部分缺一不可。FOR:负责打开循环命令开关。IN负责从集合中抽取元素替换变量。它后面的括号不能省略。DO负责安排需要执行的命令和动作。它可以是一个命令如echo,也可以是一组命令如if exist。/参数、%%I、(Command1)、Command2是它的动态组成部分,也是我们讲解的重点。参数:用来解释FOR,设置循环的模式。FOR常用的参数有/D、/F、/R、/L。变量:形式如%%I。集合中用来执行后面命令的任意一个可能的数值,需要执行命令的对象,一个替换位置。当它空缺时是变量,当FOR运行时它抽取集合里的数值替换自己,从而变成一个固定值。因此它来自集合,限于集合范围。集合范围、总量。是一个数据库,由固定数值组成,向变量提供固定数值,用于替换变量。变量和集合的关系是需求与供给的关系。集合的个数决定了需要循环的次数。集合要用括号括起来,不能缺少。3、FOR的处理流程:打开循环命令FOR。第一步,从集合中抓取第一个数值A。用A替换形式变量%%I。用被A替换的%%I运行一次DO后面的命令Command2。第二步、从集合中抓取第二个数值B。用B替换形式变量%%I。用被B替换的%%I运行一次DO后面的命令Command2。第三步、从集合中抓取第三个数值C。用C替换%%I。用被C替换的%%I执行DO后面的命令。…………“抓取-替换-执行命令”机器根据命令不停地从集合中抓取数值替换变量执行后面的命令。一次只处理一个数值,依次循环下去,直至集合中的数值全部被处理过。这就是FOR命令的奥秘所在:逐个抓取,依次完成。三、实战应用理论的东西太过抽象,我们用事例来解释。回头看看前面的故事,李四如何用那串钥匙开锁?1、钥匙的启示可能很多人一下子就想到了,既然钥匙在手中,何不一个一个的试,看哪个能打开。钥匙有一大串,而门锁
bat文件中for用法
bat文件中for用法
在批处理(batch)文件中,`for` 命令用于循环处理一系列文件或文本行。下面是 `for` 命令的一些基本用法和示例:
1. 基本的 `for` 循环:
```batch
echo off
for %%i in (1 2 3 4 5) do (
echo %%i
)
```
2. 使用 `do` 命令:
```batch
echo off
for %%i in (1 2 3 4 5) do (
echo This is loop %%i
)
```
3. 使用 `in` 命令中的文件:
```batch
echo off
for %%i in ( ) do (
echo %%i has %%~zi bytes )
```
4. 遍历文件中的每一行:
```batch
echo off
for /f "tokens=" %%i in () do ( echo %%i
)
```
5. 使用 `delims` 设置分隔符:
在处理文本文件时,你可以设置分隔符,以便按特定的格式解析每一行。例如,假设有一个以逗号分隔的文本文件:
```batch
echo off
for /f "tokens=1,2 delims=," %%i in () do (
echo Column1: %%i, Column2: %%j
)
```
6. 结合 `if` 命令:
你还可以在 `for` 循环内部使用 `if` 命令进行条件判断:
```batch
echo off
for %%i in (1 2 3 4 5) do (
if %%i lss 3 (
批处理-for命令详解
批处理-for命令详解
⼤纲
⼀前⾔
⼆ for语句的基本⽤法
三 for /f (delims、tokens、skip、eol、userbackq、变量延迟)
四 for /r (递归遍历)
五 for /d (遍历⽬录)
六 for /l (计数循环)
⼀、前⾔
在批处理中,for是最为强⼤的命令语句,它的出现,使得解析⽂本内容、遍历⽂件路径、数值递增/递减等操作成为可能;配合if、call、goto等流程控制语句,更是可以实现脚本复杂的⾃动化、智能化操作;合理使⽤for语句,还能使代码⼤为简化,免除各位编写⼤量重复语句之苦。⽽能否熟练使⽤for语句,已经成为衡量⼀个⼈批处理⽔平⾼低最主要的标准。
在这个系列教程中,我将通过实际应⽤中频繁出现的例⼦,带领⼤家步⼊for语句的神奇之门,⼀步步迈向for语句的魔幻殿堂,使得⼤家在实际的应⽤中,能独⽴写出简洁⾼效的代码,在批处理的世界⾥⾃由驰骋。
注意:以下的讲解,都是基于简体中⽂版Windows XP Pro SP3的操作系统环境。
⼆、for语句的基本⽤法
正如⾊彩缤纷的七彩光芒是由红绿蓝三原⾊构成的⼀样,最复杂的for语句,也有其基本形态,它的模样是这样的:
在cmd窗⼝中:
FOR %variable IN (set) DO command [command-parameters]
在批处理⽂件中:
FOR %%variable IN (set) DO command [command-parameters]
具体例⼦:
For %i in (1 2 3) do @echo %i
批处理命令中for循环基本用法
批处理命令行中for循环基本用法for循环是在办公自动化中非常实用的语句之一,本节讨论DOS语言中for循环的各种模式:如/r,/d,/l,/f等,以及各种参数:如tokens,delims,usebackq等的基本用法。我们须要根据实际情况选择不同的模式和参数来配置for循环以达到我们的目的。
1、【for语句的常规用法】
形式1:for %%i in (字符串集合/数字列表/…) do 命令语句
@echo off
for %%i in (aa,bb,cc) do echo %%i
pause
结果为:
aa
bb
cc
注:这里如果用点进行分割,字符串会作为一个整体输出
如果用逗号分割,则会一次一个单次进行打印。
判断某个磁盘是否存在,如果盘符存在,则输出它:
@echo off
echo 存在有驱动器:
for %%i in (a,b,c,d,e,f,g) if exist %%i: echo %%i
pause
显示当前目录下的文件名称(非文件夹,文件夹将不会被列出):
@echo off
for %%i in (*.*) do echo "%%i"
pause
仅显示当前目录下的txt文件名称(通配符*.txt的用法):
@echo off
for %%i in (*.txt) do echo "%%i"
pause
把txt换成其他扩展名亦可仅列出其他格式的文件名
仅显示当前目录下的txt文件名称(通配符?规定字符个数):@echo off
for %%i in (??.txt) do echo "%%i"
pause
仅会输出当前目录下文件名为2个字符的txt文件名
DOS批处理命令For循环命令详解
DOS批处理命令For循环命令详解
for命令是⼀种对⼀系列对象依次循环执⾏同⼀个或多个命令的在命令⾏或批处理中运⾏的命令,结合⼀些Windows管理中的程序后,其处理功能强⼤、应⽤灵活⽅便程度令⼈刮⽬相看。但是,其帮助信息也因此复杂往往令初学者望⽽⽣畏,这⾥根据本⼈的学习理解,把其⽤法分解简化,疏忽和错误也许在所难免。
基本格式
(这⾥写的是在命令⾏⾥⽤的格式,如果是在批处理中,需要把其中%再多加个%形成%%):
for /参数 %变量 in (集) do 命令
(注:上⾯除中⽂的以外,其余的是按它的格式要求书写的,⼤⼩写都⾏)
参数:FOR分四种参数 D L R F,并且有的参数还可附加另外的选项下⾯会分别介绍
变量:(记住如果是在批处理中使⽤for命令时,变量前的%需改为%%)这个变量名是由单个字母组成且区分⼤⼩写(原帮助是这么说的,实际运⽤中⽤单个数字作为变量名试过证明也可⾏),如%B和%b代表的是不同的变量。
FOR命令会在每次循环中,把in (集)中读取到的值赋于这个变量,以便其后的命令中引⽤。
集:由系列⽂件、字符串或由命令产⽣的内容形成的集合(当然可⽤通配符 * ?,还可引⽤环境变量),FOR命令是按⼀定顺序和规律分次读取集中内容,赋值给变量,并执⾏do后的命令,进⾏循环下⼀轮,直⾄集中内容读取完毕,⽽括号是格式必须的(in到后⾯括号之间要有空格)。
命令:可以是任何合格的DOS命令或外部可被DOS调⽤的程序,且可采⽤括号把多条命令括起来,在⼀次循环中执⾏。
附注:由于⼀些⽬录或⽂件名可能会有空格,所以很多时候集⾥和命令⾥往往需要⽤英⽂引号括起来(但有时引号⾥的内容可能会被认为是字符串)表⽰是⼀整体,下⾯开始的有些例中为简捷起见,忽略⽂件名或⽬录名带空格这种情况。
bat(if和for的使用详解)
BAT语句结构
类似于C语言,批处理也有它的语句结构。批处理的语句结构主要有选择结构(if语句)、循环结构(for语句)等。
if语句(选择结构)
if语句实现条件判断,包括字符串比较、存在判断、定义判断等。通过条件判断,if语句即可以实现选择功能。
1、字符串比较
if语句仅能够对两个字符(串)是否相同、先后顺序进行判断等。其命令格式为:
IF [not] string1 compare-op string2 command1 [else command2]
其中,比较操作符compare-op有以下几类:
== - 等于
EQU - 等于
NEQ - 不等于
LSS - 小于
LEQ - 小于或等于
GTR - 大于
GEQ - 大于或等于
选择开关/i则不区分字符串大小写;选择not项,则对判断结果进行逻辑非。
字符串比较示例:
===============================================
@echo off
set str1=abcd1233
set str2=ABCD1234
if %str1%==%str2% (echo 字符串相同!) else (echo 字符串不相同!) if /i %str1% LSS %str2% (echo str1^<str2) else (echo str1^>=str2) echo.
set /p choice=是否显示当前时间?(y/n)
if /i not %choice% EQU n echo 当前时间是:%date% %time%
win for命令参数
win for命令参数
win for是一个命令行工具,它用于在Windows操作系统中执行一系列任务。通过使用各种参数,用户可以在命令行界面中快速而有效地完成各种任务。下面将介绍win for的一些常用参数,并说明它们的使用方法和作用。
首先,我们需要了解一下win for的基本语法。win for的基本语法如下:
for /R文件目录%%G in (文件匹配模式) do命令语句
其中,/R参数用于递归地遍历指定的文件目录,并按照文件匹配模式选择相应的文件。然后,命令语句将作用于每一个符合条件的文件。在命令语句中,可以使用%%G来引用当前正在处理的文件名。
接下来,我们来看一些常用的win for参数和实际使用场景:
1. /F参数:用于遍历一个文本文件的每一行。
例如,我们可以使用以下命令来读取一个文本文件,并逐行执行命令:
for /F "tokens=* USEBACKQ" %%G in ("file.txt") do命令语句
2. /D参数:用于遍历指定目录的子目录。
例如,我们可以使用以下命令来遍历指定目录下的所有子目录,并执行相应的命令:
for /D %%G in ("目录路径\*") do命令语句
3. /L参数:用于遍历一个指定的范围。
例如,我们可以使用以下命令来遍历一个指定范围内的数字,并做相应的处理:
for /L %%G in (开始,步长,结束) do命令语句
4. /I参数:用于循环遍历指定的字符串列表。
例如,我们可以使用以下命令来遍历一个指定的字符串列表,并逐一执行相应的命令:
批处理BAT脚本中for命令的使用方法
死循环
@echo off for /l %%i in () do ( echo Hello ) pause
步长不一定是1
@echo off echo 1到10之间的偶数: for /l %%i in (1,2,10) do ( echo %%i ) pause
步长可以是负数
X
小心文件集合重复处理的问题
C:\Test>dir /b *.txt 0_1.txt 0_2.txt 0_3.txt C:\Test>test.bat 正在处理:0_1.txt 正在处理:0_2.txt 正在处理:0_3.txt 正在处理:new_0_1.txt 请按任意键继续. . . C:\Test>dir /b *.txt new_0_2.txt new_0_3.txt new_new_0_1.txt
for %%variable in (set) do command
控制变量: • 区分大小写 • 推荐使用单个英文字母 • 不建议使用数字 • BAT脚本里面使用%%i • CMD窗口里面使用%i 文件集合: • 一个或多个文件 • 可以使用通配符 • 需要放在圆括号里面 • 不判断文件是否真实存 在 需要执行的命令: • 多行命令需要放在圆括 号里面 • BAT脚本里面使用 @echo off 之后不需要使 用多余的@来关闭回显
bat批处理for命令快速入门
bat批处理for命令快速⼊门
格式:FOR [参数] %%变量名 IN (相关⽂件或命令) DO 执⾏的命令
作⽤:对⼀个或⼀组⽂件,字符串或命令结果中的每⼀个对象执⾏特定命令,达到我们想要的结果。
注意:在批处理⽂件中使⽤ FOR 命令时,指定变量请使⽤ %%variable,⽽不要⽤ %variable。变量名称是区分⼤⼩写的,所以 %i 不同于 %I.
关于:for命令可以带参数或不带参数,带参数时⽀持以下参数:/d /l /r /f
下⾯分别解释⼀下
零:⽆参数时:
---
FOR %variable IN (set) DO command [command-parameters]
%variable 指定⼀个单⼀字母可替换的参数。
(set) 指定⼀个或⼀组⽂件。可以使⽤通配符。
command 指定对每个⽂件执⾏的命令。
command-parameters
为特定命令指定参数或命令⾏开关。
TTT⽰例:
for %%i in (t*.*) do echo %%i --显⽰当前⽬录下与t*.*相匹配的⽂件(只显⽰⽂件名,不显⽰路径)
for %%i in (d:\mydocuments\*.doc) do @echo %%i --显⽰d:\mydocuments\⽬录下与*.doc相匹配的⽂件
⼀、参数 /d (参数只能显⽰当前⽬录下的⽬录名字)
格式:FOR /D %variable IN (set) DO command [command-parameters]
这个参数主要⽤于⽬录搜索,不会搜索⽂件,/D 参数只能显⽰当前⽬录下的⽬录名字。(TTT特别说明:只会搜索指定⽬录下的⽬录,不会搜索再下⼀级的⽬录。)
批处理命令For循环命令详解
分类:2010-06-11 13:0416793人阅读0
批处理for命令详解
FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能
看看他的基本格式这里我引用的是批处理中的格式,直接在命令行只需要一个%号
FOR 参数%%变量名IN 相关文件或命令DO 执行的命令
参数:FOR有4个参数/d /l /r /f 他们的作用我在下面用例子解释
%%变量名:这个变量名可以是小写a-z或者大写A-Z,他们区分大小写,FOR会把每个读取到的值给他;
IN:命令的格式,照写就是了;
相关文件或命令:FOR要把什么东西读取然后赋值给变量,看下面的例子
do:命令的格式,照写就是了
执行的命令:对每个变量的值要执行什么操作就写在这.
可以在CMD输入for /看系统提供的帮助对照一下
FOR %%variable IN set DO command command-parameters
%%variable 指定一个单一字母可替换的参数;
set 指定一个或一组文件;可以使用通配符;
command 指定对每个文件执行的命令;
command-parameters
为特定命令指定参数或命令行开关;
现在开始讲每个参数的意思
/d
仅为目录
如果Set 也就是我上面写的"相关文件或命令" 包含通配符和,将对与Set 相匹配的每个目
录而不是指定目录中的文件组执行指定的Command;
系统帮助的格式:FOR /D %%variable IN set DO command
他主要用于目录搜索,不会搜索文件,看这样的例子
echo off
for /d %%i in do echo %%i
批处理,for,各参数详解(dlrf)
批处理for命令详解 FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能! 看看他的基本格式(这里我引用的是批处理中的格式,直接在命令行只需要一个%号) FOR 参数 %%变量名 IN (相关文件或命令) DO 执行的命令 参数:FOR有4个参数 /d /l /r /f 他们的作用我在下面用例子解释 %%变量名 :这个变量名可以是小写a-z或者大写A-Z,他们区分大小写,FOR会把每个读取到的值给他; IN:命令的格式,照写就是了; (相关文件或命令) :FOR要把什么东西读取然后赋值给变量,看下面的例子 do:命令的格式,照写就是了! 执行的命令:对每个变量的值要执行什么操作就写在这. 可以在CMD输入for /?看系统提供的帮助!对照一下 FOR %%variable IN (set) DO command [command-parameters] %%variable 指定一个单一字母可替换的参数。 (set) 指定一个或一组文件。可以使用通配符。 command 指定对每个文件执行的命令。 command-parameters 为特定命令指定参数或命令行开关。 现在开始讲每个参数的意思 /d 仅为目录 如果 Set (也就是我上面写的 "相关文件或命令") 包含通配符(* 和 ?),将对与 Set 相匹配的每个目 录(而不是指定目录中的文件组)执行指定的 Command。 系统帮助的格式:FOR /D %%variable IN (set) DO command 他主要用于目录搜索,不会搜索文件,看这样的例子 @echo off for /d %%i in (*) do @echo %%i pause 把他保存放在C盘根目录执行,就会把C盘目录下的全部目录名字打印出来,而文件名字一个也不显示! 在来一个,比如我们要把当前路径下文件夹的名字只有1-3个字母的打出来 @echo off for /d %%i in (???) do @echo %%i pause 这样的话如果你当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示了 思考题目: @echo off for /d %%i in (window?) do @echo %%i pause 保存到C盘下执行,会显示什么呢?自己看吧! /D参数只能显示当前目录下的目录名字,这个大家要注意! /R 递归 进入根目录树 [Drive:]Path,在树的每个目录中执行 for 语句。如果在 /R 后没有指定目录,则认为是 当前目录。如果 Set 只是一个句点 (.),则只枚举目录树。 系统帮助的格式:FOR /R [[drive:]path] %%variable IN (set) DO command 上面我们知道,/D只能显示当前路径下的目录名字,那么现在这个/R也是和目录有关,他能干嘛呢?放心他比 /D强大多了! 他可以把当前或者你指定路径下的文件名字全部读取,注意是文件名字,有什么用看例子! @echo off for /r c:\ %%i in (*.exe) do @echo %%i pause 咋们把这个BAT保存到D盘随便哪里然后执行,我会就会看到,他把C盘根目录,和每个目录的子目录下面全部 的EXE文件
批处理-----4.for循环中的变量
批处理-----4.for循环中的变量
FOR命令中的变量
FOR命令中有⼀些变量,他们的⽤法许多新⼿朋友还不太了解,今天给⼤家讲解他们的⽤法!
先把FOR的变量全部列出来:
~I - 删除任何引号("),扩展 %I
%~fI - 将 %I 扩展到⼀个完全合格的路径名
%~dI - 仅将 %I 扩展到⼀个驱动器号
%~pI - 仅将 %I 扩展到⼀个路径
%~nI - 仅将 %I 扩展到⼀个⽂件名
%~xI - 仅将 %I 扩展到⼀个⽂件扩展名
%~sI - 扩展的路径只含有短名
%~aI - 将 %I 扩展到⽂件的⽂件属性
%~tI - 将 %I 扩展到⽂件的⽇期/时间
%~zI - 将 %I 扩展到⽂件的⼤⼩
%~$PATH:I - 查找列在路径环境变量的⽬录,并将 %I 扩展
到找到的第⼀个完全合格的名称。如果环境变量名
未被定义,或者没有找到⽂件,此组合键会扩展到
空字符串
我们可以看到每⾏都有⼀个⼤写字母"I",这个I其实就是我们在FOR带⼊的变量,我们FOR语句代⼊的变量名是什么,这⾥就写什么.⽐如:FOR /F %%z IN ('set') DO @echo %%z
这⾥我们代⼊的变量名是z那么我们就要把那个I改成z,例如%~fI改为%~fz
⾄于前⾯的%~p这样的内容就是语法了!
好开始讲解:
⼀、 ~I - 删除任何引号("),扩展 %I
这个变量的作⽤就如他的说明,删除引号!
我们来看这个例⼦:
⾸先建⽴临时⽂件temp.txt,内容如下
"1111
"2222"
3333"
"4444"44
"55"55"55
可建⽴个BAT⽂件代码如下:
批处理(bat文件)for用法详解
批处理(bat⽂件)for⽤法详解
对⼀组⽂件中的每⼀个⽂件执⾏某个特定命令。
FOR %variable IN (set) DO command [command-parameters]
%variable 指定⼀个单⼀字母可替换的参数。
(set) 指定⼀个或⼀组⽂件。可以使⽤通配符。
command 指定对每个⽂件执⾏的命令。
command-parameters 为特定命令指定参数或命令⾏开关。
在批处理程序中使⽤ FOR 命令时,指定变量请使⽤ %%variable,⽽不要⽤ %variable。
变量名称是区分⼤⼩写的,所以 %i 不同于 %I.
如果启⽤命令扩展,则会⽀持下列 FOR 命令的其他格式:
FOR /D %variable IN (set) DO command [command-parameters]
如果集中包含通配符,则指定与⽬录名匹配,⽽不与⽂件名匹配。
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
检查以 [drive:]path 为根的⽬录树,指向每个⽬录中的 FOR 语句。
如果在 /R 后没有指定⽬录规范,则使⽤当前⽬录。如果集仅为⼀个单点(.)字符,则枚举该⽬录树。
FOR /L %variable IN (start,step,end) DO command [command-parameters]
该集表⽰以增量形式从开始到结束的⼀个数字序列。因此,(1,1,5)将产⽣序列
bat判断语句
bat判断语句
BAT是Windows的命令行批处理语言,它提供了很多常用的语句和命令,其中包括判断语句。在编写批处理脚本时,经常需要根据某些条件判断程序的执行路径,BAT提供了以下几种判断语句:IF、ELSE、FOR及其变体等。
IF语句是BAT中一个非常重要的判断语句,可根据条件执行不同的命令。IF语句的基本用法如下:
IF condition command
其中,condition是一个指定条件的表达式,command是需要执行的命令。如果condition成立,则执行command;否则不执行。如果需要同时处理条件为真和条件为假的情况,则可以使用ELSE语句,其用法如下:
IF condition command1 ELSE command2
当条件condition成立时,执行command1;否则执行command2。
除了简单的IF和ELSE语句外,BAT还提供了一些变体,例如IF NOT、IF EXIST和IF DEFINED等,以满足更丰富的条件判断。
IF NOT语句与IF语句类似,但是它的相反条件成立时才会执行。其语法如下:
IF NOT condition command
当条件condition成立时,不执行command;否则执行。
IF EXIST语句用于判断指定的文件或目录是否存在。其基本语法如下:
IF EXIST filename command1 ELSE command2
其中,filename表示需要判断的文件或目录,如果filename存在,则执行command1;否则执行command2。
批处理for循环
for这条命令的作用主要是用来处理文本内容for命令的四个参数/d,/r,/l ,/f当然这些参数也是可以不加的for基本格式:FOR %variable IN (set) DO command [command-parameters]For %%a in (*.log) do echo %%aPause%variable 指定一个单一字母可替换的参数。(set) 指定一个或一组文件。可以使用通配符。command 指定对每个文件执行的命令。command-parameters 为特定命令指定参数或命令行开关。1、/D基本格式:FOR /D %variable IN (set) DO command [command-parameters]目录操作如果集中包含通配符,则指定与目录名匹配,而不与文件名匹配。@echo offfor /d %%a in (?indows) do echo %%apause?表示是任意一个字符2、/r基本格式:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。如果在 /R 后没有指定目录,则使用当前目录。如果集(set)为一个单点(.)字符,则枚举该目录树。显示当前目录和子目录下所有的扩展名为.txt的文件@echo offfor /r %%a in (*.txt) do echo %%apause3、/l基本格式: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)。4、/f基本格式:for /F "ParsingKeywords" %% Variable in (FileNameSet) do Command"ParsingKeywords"代表的是下列这些选项参数eol=c - 指一个行注释字符的结尾(就一个)skip=n - 指在文件开始时忽略的行数delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。关键字eol=后面的符号表示忽略以该符号开头的行
批处理 for if 命令的用法
批处理 for + if 命令的用法 批处理 for + if 命令的用法 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 自然
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for语句可以在命令行提示符中使用,也可以在批处理文件中使用。这两种情况下唯一的区别是%和%%,参加下文说明。
一、for语句的格式:
for [参数] 变量in (集合) do 命令[命令的参数]
二、for语句的作用:对集合内的元素逐一执行后面的命令。
1、如:for %%i in (你好) do echo %%i
将在屏幕上显示“你好”2个字。这里集合是“你好”,执行的命令是“echo”。由于集合中只有1个元素,因此循环只运行一次。
如果改成for %%i in (你好朋友) do echo %%i
将会显示2行文字,第一行为“你好”,第二行为“朋友”。因为2个词之间有空格,因此集合中就有了2个元素,循环将运行2次。
2、注意:以上for语句的运行方式是新建一个批处理文件,即扩展名为“.bat”的文件,内容为上面的命令,然后运行。为了批处理执行完不退出,可在最后加上一条pause>null命令,这样能看到执行的结果。要想通过cmd命令行执行的话,必须将%%换成%,即去掉一个%,如下:
for %i in (你好) do echo %i
3、以下所有例子都是这样,若要在命令行提示符下执行,请将所有的%%改成一个%。
三、for语句详细说明:
上面语句格式中有的加了中括号[],表示这个语句元素不是必须的,只在需要时使用。像刚才显示“你好”的命令中就没有使用[参数]这
个语句元素。所有语句元素间用空格隔开。
各语句元素的写法:for、in、do这3个符号是固定不变的
1、[参数]的种类:只有4种,分别是/d、/r、/l、/f(即目录Directory、递归recursion、序列list、文件file),他们用于对后面的集合的含义做出解释,请与下面的集合解释结合来看。这4个参数不区分大小写,可以联合使用,即一条for语句可以出现多个参数。
2、变量:除10个数字外(0-9)的所有符号(因为0-9往往作为形参使用,为了与此区别),变量名一般用单个字母表示即可,而且变量名区分大小写,即A和a是两个不同的变量。变量名前面必须是%,当在命令提示符下执行时,只用一个%;而在批处理程序中,必须用%%。
一行语句中,一般只需定义一个变量。使用/f参数中的tokens 选项可以将集合中的元素分解成多个值,并自动定义新的变量对应这些值。这时语句中可以使用多个变量,通常按字母顺序命名,即第一个是%%a,那么后一个就用%%b。如果第一个是%%i,后一个就用%%j。依此类推。具体看后面的相关内容。
变量可以直接在do后面的命令中使用。每次使用的变量总数不超过52个。
3、集合:集合必须放在括号里。集合是一行文本,这行文本可能有几种类型,如“你好”只是一串字符;“c:\boot.ini”是一个文件;“dir /b”是一个命令。
(1)如果for语句中没有使用任何参数,对待集合文本的处理方式是:
第一步:如果集合文本用一对百分号(%)括起来,则系统在执行for 循环时首先查找前面定义的变量中是否有与百分号内文本相同的,有则以该变量值替换掉集合文本,否则集合文本不变,进入第三步。
举例:设当前目录为D盘根目录,且根目录存在文件hello.txt、study.txt。set stuname=hello.txt
for %%i in (stuname) do echo %%i ;将显示stuname。
for %%i in (%ttuname%) do echo %%i ;将显示%ttuname%,因为没有这个变量。
for %%i in (%stuname%) do echo %%i ;将显示hello.txt,哪怕这个文件不存在,也仍然显示这个名字。
for %%i in (%stuname%) do echo %%~ti ;将显示hello.txt文件的最后修改日期。如果文件不存在,则不显示任何东西。这个命令只是验证这里是把hello.txt优先作为一个文件来处理的。
第二步:如果集合文本用一对半角双引号(以下在谈及标点符号时均为英文半角,不再说明)括起来了,则先去掉双引号,再看是否被百分号括着。如果引号内的文本用百分号括起来了,则查找是否存在相应的变量名。存在的话,用变量值替换掉变量,再用双引号括起来作为集合文本,否则集合文本不变,进入第三步。
举例:继续上面的例子
for %%i in ("%stuname%") do echo %%~ti ;和不加双引号效果相同。for %%i in ("stuname") do echo %%i ;直接显示"stuname"。
for %%i in ("stuname teachname") do echo %%i ;直接显示"stuname
teachname"。这里是把引号内内容作为整体处理的,注意与不加双引号的区别。
第三步:如果集合文本被双引号括着的话,先去掉双引号。然后检查当前目录下是否存在同名的目录或文件。如果存在,将该文件作为集合元素处理(这里也接受通配符,如*.txt。如果用了通配符,有匹配的文件(不含目录)的,将这些文件名各作为集合的一个元素。没有匹配的,则循环结束,输出情况依命令而定)。如果不存在这样的目录或文件,再看原来是否有双引号,有就作为一行文本对待,整体作为集合元素处理。这时集合将只有一个元素,for循环也只能循环一次就退出。如果原来没有双引号括着,再看该文本有没有用空格或逗号分隔。没有的话,则集合只有一个元素,否则根据分隔符把文本分成多个部分,每个部分单独作为集合的一个元素。参见开篇的例子。
举例:继续上面的例子
for %%i in ("hello.txt") do echo %%~ti ;显示这个文件的时间
for %%i in (hello.txt) do echo %%~ti ;显示这个文件的时间,加不加双引号没区别。
for %%i in (*.txt) do echo %%i ;显示当前目录下(不含子目录)所有文本文件的名字,自然也包括hello.txt和study.txt。而且加了双引号结果也一样。
for %%i in (hello study) do echo %%i ;两个单词分两行显示
for %%i in ("hello study") do echo %%i ;显示"hello study",即如果不存在这样的文件,而且字符串中有分隔符的话,有没有双引号效果就