玩转DOS命令成为批处理高手--- 特殊符号

@

关闭命令行回显符号 放在命令行前面 可以屏蔽命令行本身。

%

严格来说 这个符号算不上命令 它只是批处理中的参
数而已 ( 多个 % 一起使用 情况除外 ) 。这个符号非常特殊 用法复杂。

|

命令管道符
把前一命令的输出结果当后一命令的输入参数来使用。
格式 第一条命令 | 第二条命令 | [| 第三条命令 ......]
例如
dir C:\ | find "e"
这个命令的执行结果为 C 盘查找 列出其中包含 e 字符的所有
文件和文件夹。
再例如
在不使用 format 的自动格式化参数时 可以这样来自动格式化 A
echo y|format a: /s /q /v :system
用过 format 的都知道 再格式盘时要输入 y 来确定是否格盘 这个
命令前加上 echo y 并用 | 字符来将 echo y 的结果传给 format 命令
从而达到自动输入 y 的目的。 ( 此命令有危险性 测试请慎重 )

>>>

这两个命令都是输出重定向符 就是把前面命令
的输出写入到一个文件中。这两个命令的唯一区别是 ,“ > 会清除掉
原有文件中的内容后 把新的内容写入原文件 >> 追加新的内
容到原文件末尾 不会改动其中的原有内容。
程序举例
if /? > if.txt
执行上面代码后 将在本文件所在目录产生一个名为 if txt 文件
里面记录 if 的所有帮助内容。
如果输出的文件名含有空格 那么文件名就需要用双引号括起来
reg add /? >"reg add".txt
reg add /? >"reg add.txt"
上面这两种格式都是可以的。
如果要将某个变量写入文件 就要借助 echo 了。
程序例子
@echo off
set num= 123
echo %num%>>D:\num.txt
上面是输出到指定路径的例子。
程序例子
@echo off
echo Hello World!>file.doc
格式细节注意 上面的的 Hello World! > 之间没有空格
那么输出的 Hello World! 末端也没有空格。如果上面的的 Hello
World! > 之间有空格 那么输出为 Hello World! ”, 也有
空格。
> 或者 >> file.doc 之间有无空格都无所谓。
程序例子
for /l %%i in ( 1 , 1 , 100 ) do set /p var=%%i<nul>>num.txt
1 100 连续不间断写入文本文档 num.txt 中。

<

输入重定向命令 从文件中读入命令输入 而不是从键盘中读
入。
例如 D 盘里有一个名为日期的 txt 文件 并且文件里的内容为
2013-06-09
那么执行下面的批处理
@echo off
date < D:\ 日期 .txt
这样就可以不用等待而直接将当前日期修改为 2013 6 9 日。

>&

将一个句柄的输出写入到另一个句柄的输入中。

<&

刚好和 >& 相反 从一个句柄读取输入并将其写入到另一个句柄
输出中。

^

转义字符
< > & 这三个符号以及回车的前导符 作用是将 < > & 这三个
符号的特殊功能和回车去掉 仅仅把它当成符号而不使用它们的特殊
意义。
例如
echo abc^>tmp.txt
结果是在窗口中显示
abc>tmp.txt
没有将 abc 内容写入 tmp.txt 而是将 abc 连同一个空格一起
写入到 tmp.txt 文件里。
注意 ^ > 之间不可以有空格 否则无法转义。如果 abc ^
之间有空格 这个空格会当做字符一并显示出来。 > tmp
果有空格 同样这个空格也会被当做字符一并显示出来。
如果有括号包含 set /a 计算表达式 表达式也有括号 那么表达式的
括号必须用转义字符 否则会显示括号不成对
@echo off
setlocal enabledelayedexpansion
for /l %%i in ( 1 , 1 , 10 ) do (
set /a var=(%%i+ 1 ^)* 2
echo !var!
)
pause
注意到上面 set /a var=(%%i+ 1 ^)* 2 括号有一个转义字符。
输出 ^ > >> & && | || 要借助转义字符。另外 在延迟变量的情况
下输出感叹号 则需要连续使用两个转义字符
@echo off
echo ^^
echo ^>
echo ^>^>
echo ^&
echo ^&^&
echo ^|
echo ^|^|
pause
@echo off
setlocal enabledelayedexpansion
echo ^^!
pause
转义字符高级篇 转义字符用于续行
@echo off
echo ^
华人 ^
^
共和国
pause
窗口显示
中华人民共和国
按任意键继续 ...
注意 最后的 共和国 后面不要加转义字符 否则 pause 也被续上
去了。另外 ^ 后面不要有空格 否则达不到续行的作用。为什么转
义字符放在行尾可以起到续行符的作用呢 原因很简单 因为每个行
尾都有一个看不见的符号 即回车符。转义字符位于行尾时 就让回
车符失效了 从而起到续行的作用。但是 由于 echo 可以显示多达
8184 个字符 所以嘛 用转义字符来续行徒增麻烦 用处不大。

&

组合命令
它的作用是用来连接 n DOS 命令 并把这些命令按顺序执行
不管是否有命令执行失败。
语法
第一条命令 & 第二条命令 [& 第三条命令 ...]
程序例子
dir Z:\&dir Y:\&dir C:\
以上命令会连续显示 Z Y C 盘内容 不理会该盘是否存在。
格式细节 dir 是关键字 后面一定要有空格。而其余地方有无空格
都无所谓。当然 我们这样写也是可以的
dir Z:\ & dir Y:\ & dir C:\
这样明朗一点。
copy a.txt b.txt /y & del a.txt
这里 & 两边的命令是有执行顺序的 从前往后执行。

&&

组合命令
这个命令也是把它前后两个命令连接起来 并按这些命令
的顺序执行。与 & 命令不同之处在于 它在从前往后依次执行被它连
接的几个命令时会自动判断是否有某个命令执行出错 一旦发现出错
后将不继续执行后面剩下的命令。
语法
第一条命令 && 第二条命令 [&& 第三条命令 ...]
程序例子
dir Z:\ && dir Y:\ && dir C:\
程序执行到 dir Z:\ 显示 系统找不到路径 后就不执行后面的命令
了。

||

组合命令符
语法
第一条命令 || 第二条命令 [|| 第三条命令 ...]
用这种方法可以同时执行多条命令 当一条命令失败后才
执行第二条命令 当碰到执行正确的命令后 将不执行后面所有的命
令。如果没有出现正确的命令 则一直执行完所有的命令。
提示 组合命令和重向命令一起使用必须注意优先级 管道命令的优
先级高于重定向命令 重定向命令的优先级别高于组合命令。
程序例子
问题 C 盘和 D 盘的文件和文件夹列出到 a.txt 文件中。
dir C:\ && dir D:\ > a.txt
这样执行后 a.txt 里只有 D 盘的信息 为什么 因为组合命令的优
先级别没有重定向命令的优先级别高 所以这句在执行时将本行分成
这两部分 dir C:\ dir D:\>a.txt 而并不是你想的这两部分
dir C:\ && dir D:\
>a.txt 。要使用组合命令 && 达到题目的要求 必须这么写
dir C:\> a.txt && dir D:\ >>a.txt
这样 根据优先级别的高低 DOS 将把这句话分成下面两部分 dir C:\
>a.txt dir D:\>>a.txt
当然 这里还可以用 & 命令
dir C:\ >a.txt & dir D:\ >>a.txt

""

双引号是字符串界定符
表示双引号内的内容界定为字符。
常用于文件、文件夹名字带空格的情况 以及表示字符串。
另外 我们在 if 语句里 比较两个变量时 有时用双引号可以对程序
的健壮性有很大好处。
例如
@echo off
set /p choose= 请选择 (Y/N)
if /i "choose"=="Y" (echo Yes) else (echo No)
pause
这里 如果我们不用双引号 那么假如我们读入的数据是一个回车
那么程序就会出错而自动退出。有双引号 则输入回车 输出为 No
比较两个数字时 如果用双引号 那么计算机就会认为它们不再是数
而作为字符来比较。
例如 987 1234 " 987 " 会比 " 1234 " 大。测试代码如下
@echo off
set A= 987
set B= 1234
if %A% gtr %B% (echo A 大于 B) else (echo A 小于 B)
if "%A%" gtr "%B%" (echo "A" 大于 "B") else (echo "A" 小于 "B")
pause
例子
C:\>dir "program files"
要用双引号才有效 因为文件名 program files 存在空格。
字符界定符高级篇
假如两个字符串没有包含任何内容 就表示空值 这个可以用来判断
某个变量的值是否存在
测试代码
@echo off
if "%A%" equ "" (echo A 是空值。 ) else (echo A 值不是空值 A
等于 %A%)
set /p A= 请输入 A
if "%A%" equ "" (echo A 是空值。 ) else (echo A 值不是空值 A
等于 %A%)
pause
当然 if defined 也可以判断字符是否存在 详见 if 命令。

,

逗号相当于空格 在某些情况下可以当做空格使用。
程序例子
@echo off
echo,Hello world!
start,iexplore.exe
dir,E:\
pause
程序可以执行。但这种写法很邪恶 应该摒弃。
对于 set /a 语句 可以连续赋值多个变量
@echo off
set /a X=Y=Z= 0
echo x=%X% y=%Y% z=%Z%
set /a x+= 1 ,y*= 2 ,z - = 0
echo x=%X% y=%Y% z=%Z%
pause

;

分号
当命令相同时 可以将不同目标用分号隔离 执行效果不变。
此符号属于旁门左道 不宜采用
程序例子
dir c:\;d:\;e:\;z:\
pause
上面命令相当于
dir C:\
dir D:\
dir E:\
dir Z:\
pause
而如果没有 Z 盘存在 则所有 dir C D E 盘都不会执行 后面如
果还有命令 也不会执行。
语法细节 :“ dir c:\;d:\;e:\;z:\ 指令 分号与别的字符间可以有空格
也可以没有空格。
程序例子
dir C:\;D:\;E:\adobe\;F:\
假若 E 盘不存在名字为 adobe 的文件夹 程序仍然会执行 dir C D
F 只是执行到 E 盘后找不到 adboe 文件夹 会提示 找不到文件
结论 对于 dir 命令 如果目标驱动器不存在 则所有命令都不会执
行。如果驱动器存在 仅文件或文件夹不存在 所有有效的命令都会
执行。
再看一个例子
假如我们的 qq.exe qqgame.exe 的路径分别为
D:\Tencent\QQ\Bin\qq.exe D:\Tencent\QQGame\qqgame.exe
么下面程序
@echo off
start D:\Tencent\QQ\Bin\qq.exe
start D:\Tencent\QQGame\qqgame.exe
pause
程序可以正常执行。但如果用分号修改为
start D:\Tencent\QQ\Bin\qq.exe;D:\Tencent\QQGame\qqgame.exe
则程序无法执行。程序修改为
start D:\Tencent\QQ\Bin\qq.exe ; D:\Tencent\QQGame\qqgame.exe
这个程序和上面程序的区别仅仅是分号前后各添加了空格 程序可以
执行 但只打开了 qq.exe 后面的没有执行。
再举一例
@echo off
set a= 123 ;b= 456
echo %a%
echo %b%
pause
这个程序根本不会将 456 赋值到 b a 的值就是 123 ;b= 456
结论 对于 set 分号无效。 set 语句要用逗号 set /a a= 123 ,b= 456
在这里 逗号是必须的 而且还不能用空格。
结论 分号存在的意义不大 尽可能不要用分号。

( )

左右括号必须成对使用 括号中可以包含多行命令 这些
命令将被看成一个整体 视为一条命令行 即复合语句。此时 如果
要用到括号里的代码动态实时值 就需要用到延迟变量了。
例如 echo 1 & echo 2 & echo 3 可以写成
(
echo 1
echo 2
echo 3
)
例子二
@echo off
setlocal enabledelayedexpansion
set var= 0
(
set /a var+= 1
echo var 1 =%var% var 2 =!var!
)
pause
输出结果为 第一个 var 等于 0 第二个 var 等于 1
从上面可以看出 有了括号后 要实时得到变量的动态值 就必须用
延迟变量。

!

感叹号在变量延迟问题 (setlocal enabledelayedexpansion)
用来表示变量。即 %var% 变成 !var! 。详见延迟变量专题 setlocal
enabledelayedexpansion
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code_徐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值