MS-DOS脚本编程[3]-控制结构
来源:百度文库 编辑:神马文学网 时间:2024/06/13 02:16:15
控制结构
1. 如何定义行号?
:
可以定义任意长度的 label 并且中间允许有空格,但是 MS-DOS 只区分其中的前 8 个字符,以冒号开头的脚本文件行不被处理。
行号同样不区分大小写。行号的冒号前面可以有空白符号。
2. 如何使用 GOTO 语句?
GOTO
GOTO :EOF
:EOF 不区分大小写
如果命令找不到需要跳转的行好位置,则显示:
Label not found
3. 如何使用 For 循环语句?
FOR {%|%%} IN (
FOR 语句可以在命令行和脚本文件中使用,在脚本文件中使用,变量定义和引用用 %% ;在命令行中使用,变量定义和引用用 % 。变量名是大小写敏感的,并且可以用除了 0 到 9 任意的单个字符(不包含元符号),这点比较特殊。 DO 后面是需要执行的语句, 循环变量的定义域在 DO 子句中。
l 可以是字符串的集合,中间用空白符分割:
l 可以是通配符展开的 文件名或路径名
*.bat *.?ml
另外文件名还可以是特殊的字符 , 当前目录 (.) 和上级目录( .. )
这些内容之间可以通过分隔符分开,分隔符是空白、分号、逗号、双引号,注意引号本身会传递到循环变量中去, 而分号和逗号则不会,另外如果其他三种分隔符出现在双引号中,他们会被传递到循环变量中去。
可以对不同种类的
l 对字符串遍历
FOR %% IN (
l 对文件进行遍历
FOR %% IN (
下面的命令需要命令扩展打开
l 对目录进行遍历
FOR /D %% IN (
l 递归遍历文件树
FOR /R [[
如果没有目录指定,则默认从当前目录开始。
l 进行步长型循环
FOR /L %% IN (
其中
l 文件遍历和解析
FOR /F ["
其中
eof=
skip=
delims=
tokens=[{
# 剩余字段不会去除分隔符,但是去除注释
usebackq # 使用 back quotation 作为命令的引用符(见
如果不使用 usebackq 选项,
“
‘
如果使用 useback 选项,
“
‘
`
关于隐含变量,只需指定首个变量的字母,其它按顺序依次排列,最多可以定义 26 个变量。(大小写敏感)
FOR 语句中的变量名同样可以展开为:
%%~[{f|d|a|z|s|n|x|t|p}][$:]
4. IF
条件语句的语法格式为:
IF [NOT]
其中 NOT 表示条件真值去反。
利用不同的
l ERROR-LEVEL:
ERRORLEVEL
等于或大于
l 字符串相等
字符串相等,不需要用引号环绕
l 文件存在
EXIST
下面需要命令扩展打开
l 字符串比较
[/I]
/I 选项打开则比较是 case-insensitive, 如果都是数字作比较,则转为用数值比较,只能比较整数,比较浮点数则采用字符串比较法。
比较操作符 ( 大小写不敏感 ) 包括:
EQU ( 等于 ) 、 LSS ( 小于 ) 、 GTR ( 大于 ) 、 GEQ( 大于等于 ) 、 LEQ( 小于等于 ) 、 NEQ( 不等)
l 命令行扩展版本
CMDEXTVERSION
当命令扩展版本号大于或等于
l 变量定义
DEFINE
如果变量的定义存在则为真
则自动增加一下变量定义
- %ERRORLEVEL% 定义为当前的即上次命令行执行产生的 errorlevel (一定有定义)
- %CMDCMDLINE% 定义为上次传递给命令解释器 (cmd.exe) 的未经处理的原始命令行。 (如果 %CMDCMDLINE% 未被定义,否则不影响原始值)
- %CMDEXTVERSION% 定义为当前命令扩展的版本号(如果 % CMDEXTVERSION % 未被定义,否则不影响原始值)
如果使用 ELSE 语句应当用以下形式,因为必须用复合语句或 newline 来结束
IF [NOT]
) ELSE IF (
) ELSE (
)
或者:
IF [NOT]
5. CHOICE
选项分支命令,格式如下:
CHOICE [/c [
其中 /c 选项指定用户的选择键,默认是 yn ,其显示为:
[Y, N]?
/cs 指定大小写敏感选择,默认不敏感,如果不敏感则提示选择键都采用大写字符。
/n 隐藏键提示信息。
/t 指定超时时间 (second) ,根据版本不同可能会显示递减的计时数字,默认不超时。
/d 超时后的默认选项。
/m 指定提示信息,显示在选择键提示前面。
注意,该命令不是所有的命令解释器都支持。
该命令返回用户选择键的序号 ( 从 1 开始 ) 作为 errorlevel 的值 , 可由 IF 语句判断。
6. 如何定义组合语句 ?
在上述控制语句中,如 DO 、 IF/ELSE 结构中,经常会嵌入一段代码,由几条语句构成,这时候需要定义组合语句,甚至在有些结构中,例如 IF/ELSE ,即使只有一条语句也写成组合语句的形式。组合语句定义如下:
(
)
特别是