cmd第3章 命令行脚本基础
cmd第3章 命令行脚本基础
3.7.1 使用if语句
if语句用于条件分支,可以将脚本的执行引导向两条不同的执行路径,其基本语法为:
if condition (statement1) [else (statement2)]
实例:
if "%1"=="1" (echo is one) else (echo is not one)
3.7.2 使用if not语句
如果希望条件为假(false)的情况下才执行命令,则可以使用if not语句,其基本语法为:
if not condition (statement1) [else (statement2)]
实例:
if not errorlevel 0 (echo An error has occurred) & (goto :EXIT)
3.7.3 使用法definded与if not definded语句
最后两种可以使用的if语句是if defined与if not defined,这两种语句可用于检查某变量是否存在,两种语句的语法格式分别为:
if defined variable statement
和
if not definded variable statement
实例:
if defined numServers (echo Server:%numSservers%)
3.8 命令行迭代语句
3.8.1 迭代的基础
命令shell有几种不同形式的for语句,最基本的for语句形式为:
for iterator do (statement)
iterator用于控制for循环的执行。对iterator中每一个步骤或元素,都会执行特定的语句。它可以是单一的一条命令,也可以是使用使用命令管道、命令链、命令分组等技术组合起来的多条命令。
iterator通常包含一个初始化变量和一组需要反复执行的元素,比如需要遍历的一组文件或某范围内的一组值。初始化变量实质上是要使用的值的占位符,使用初始化变量时,应该注意如下几点。
- iterator变量只存在于for循环的上下文中。
- iterator变量为必须在az或者AZ范围内。
- iterator变量名是大小写敏感的,也就是说,%%A与%%a是不同的。
3.8.2 遍历一系列的值
for /l %%variable in (start,step,end) do (statement)
如:
for /l %%B in (0,2,10) do echo %%B
其语句输出为:
0
2
4
6
8
10
3.8.3 在成组的文件中迭代执行
for %%variable in (fileSet) do (statement)
如:
for %%B in (C:\Working\*.txt) do (echo %%B)
3.8.4 在目录中迭代执行
如果想操作目录,则可以使用如下的for语句格式:
for /d %%variable in (directorySet) do (statement)
如:
for /d %%B in (%SystemRoot%\*) do echo %%B
3.8.5 分析文件的内容与输出
for /f ["option"] %%variable in (source) do (statement)
如某源文件中如下一行文本:
William Stanek Engineering Willial@adatum.com 3408
for /f "tokens=1-5" %%A in (current_user.txt) do (@echo Name:%%A %%B Depart:%%C E-mail:%%D Ext:%%E)
表3-5 用于文件内容与命令输出信息分析的选项
选项 | 选项描述 | 实例 | 实例描述 |
---|---|---|---|
eol | 设置行尾注释字符 | eol=# | 将#设置为行尾注释字符 |
skip | 设置文件起始处跳过的行数 | skip=5 | 跳过源文件中的1到5行 |
delims | 设置各字段之间的分隔符 | delims=,.: | 指定逗号、句点、分号为分隔符 |
tokens | 为每一源行设置令牌字段 | tokens=1,3 tokens=2-5 | 第一个实例将令牌字段设置为使用1与3,第二个实例将令牌字段设置为使用2、3、4、5 |
usebackq | 规定可以在源指定符中使用引号:对文件名使用双引号,对命令使用反引号,对字符串使用单引号 | usebackq | 激活该选项 |
for /f "tokens=3-5 usebackq" %%C in (`type "use data.txt"`) do (@echo Depart:%%C E-mail:%%D Ext:%%E)