本文共 3665 字,大约阅读时间需要 12 分钟。
在命令行中查看帮助 command /? 例如: for /? , set /? , mkdir /?
复制:copy,删除:del,
文本输出到文件 echo abcd >> demo.txt
(1)自定义变量
@echo off set name= aliceset age= 3echo %name% is about %age% years old pause
结果:alice is about 3 years old
关键是set命令的使用,set var=变量值,var是变量的名称,当需要在其它地方使用这个变量时,需要用两个%括起来,如%var%
注意:变量赋值时候,变量与等号之间不能有空格, @表示当前行不显示命令,只显示结果
(2)变量的算术运算
在进行算术运算时,我们需要给set命令加上 /a 参数,后面再跟表达式。例如:
set var=100 set /a var=200+10 set /a var+=15 echo %var%
运行结果为225
这里的var+=15 相当于 var=%var%+15
(3)变量的逻辑运算与取余运算
需要将运算符用双引号表示出来:
set /a var=3 "&"7 set /a var=2 "^"6 set /a var=2 "<<"3 set /a var=256 ">>"2 set /a var=83 "%"10
批处理支持的运算符按优先权顺序:
() - 分组 ! ~ - - 一元运算符 * / % - 算数运算符 + - - 算数运算符 << >> - 逻辑移位 & - 按位“与” ^ - 按位“异” | - 按位“或” = *= /= %= += -= - 复合赋值运算符 &= ^= |= <<= >>= - 复合赋值运算符 , - 表达式分隔符表达式分隔符的作用是在一行中写多个表达式,例如:
(4)变量的高级特性:变量延时
例1:
@echo off set a=4 set a=5 & echo %a% pause
结果:4
解说:为什么是4而不是5呢?在echo之前明明已经把变量a的值改成5了? 让我们先了解一下批处理运行命令的机制: 批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在读取某行命令时,如果其中有变量,则变量值应该取 上一行的值。所以在读取命令“set a=5 & echo %a%”时,dos将其预处理为“set a=5 & echo 4”,然后执行。而其中的a=5所做的数值变更,只能在下一命令行才能体现了。 为了能够及时感知环境变量的动态变化,批处理设计了变量延迟。简单来说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而是边执行边赋值。例2:
@echo off setlocal enabledelayedexpansion set a=4 set a=5 & echo !a! pause
结果:5
解说:启动了变量延迟,得到了正确答案。变量延迟的启动语句是 "setlocal enabledelayedexpansion " 并且变量要用一对叹号“!!”括起来(注意要用英文的叹号),否则就没有变量延迟的效果。
(5)字符串的截取
两个%%引起来的部分作为注释,变量也用%%引起来,若echo %var%,其中var没有定义,则输出“ECHO 处于关闭状态。”若启用了变量延时,则 !! 与%% 等价,没有启用延时,则 !! 无效
@echo offsetlocal enabledelayedexpansion set str=123456789echo 第一个字符为:%str:~0,1%echo 头两个字符为:%str:~0,2%echo 头5个字符为:%str:~0,5%echo 去掉最后一个字符后的字符串为:%str:~0,-1%echo 去掉最后3个字符后的字符串为:%str:~0,-3%echo 第4个字符为:%str:~3,1%echo 第4个及其之后的3个字符为:%str:~3,4%echo 最后一个字符为:%str:~-1%echo 最后一个字符为:%str:~-1,1%echo 倒数第4个字符为:%str:~-4,1%echo 倒数第4个及其之后的2个字符为:%str:~-4,3%echo 倒数第4个及其之后的字符为:%str:~-4%%注释若启用了变量延时,用叹号引起来变量与用百分号一起来等价 %echo 倒数第4个及其之后的2个字符为:!str:~-4,3!echo 倒数第4个及其之后的字符为:!str:~-4!pause
(5)for语句的用法 (dos自带的帮助文档:for /?)
格式:FOR [参数] %%变量名 IN (相关文件或命令) DO 执行的命令
注意:在批处理文件中使用 FOR 命令时,指定变量请使用 %%variable,而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.关于:for命令可以带参数或不带参数,带参数时支持以下参数:/d /l /r
1,无参数
格式:FOR %%variable IN (set) DO command
打印当前目录所有的 .txt 文件: for %%i in (*.txt) do echo %%i
2,参数 “/d” (显示当前目录下的目录名字)
格式:FOR /D %variable IN (set) DO command [command-parameters]
3,参数 “/r” (r:递归搜索,搜索指定路径及所有子目录中与set相符合的所有文件)
格式:FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters]
此命令会搜索指定路径及所有子目录中与set相符合的所有文件,注意是指定路径及所有子目录。
1、set中的文件名如果含有通配符(?或*),则列举/R参数指定的目录及其下面的所用子目录中与set相符合的所有文件,无相符文件的目录则不列举。
2、如果set中为具体文件名,不含通配符,则枚举该目录树(即列举该目录及其下面的所有子目录)(并在后面加上具体的文件名),而不管set中的指定文件是否存在。
例:for /r d:/ %%i in (*.exe) do echo %%i --把D盘根目录,和每个目录的子目录下面全部的exe文件都列出来
4,参数 “/l” (该集表示以增量形式从开始到结束的一个数字序列。可以使用负的 Step)
dos中的注释
在批处理中,段注释有一种比较常用的方法:
goto start
= 可以是多行文本,可以是命令 = 可以包含重定向符号和其他特殊字符 = 只要不包含 :start 这一行,就都是注释 :start 另外,还有其他各种注释形式,比如:1、:: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符)
2、rem 注释内容(不能出现重定向符号和管道符号) 3、echo 注释内容(不能出现重定向符号和管道符号)〉nul 4、if not exist nul 注释内容(不能出现重定向符号和管道符号) 5、:注释内容(注释文本不能与已有标签重名) 6、%注释内容%(可以用作行间注释,不能出现重定向符号和管道符号) 7、goto 标签 注释内容(可以用作说明goto的条件和执行内容) 8、:标签 注释内容(可以用作标签下方段的执行内容)
转载地址:http://zrqii.baihongyu.com/