&
顺序执行多条命令,并且不管命令是否执行成功
@echo off echo hello world & echo no hello pause
&&
顺序执行多条命令,当碰到执行出错的命令后将不执行后面的命令
@echo off cd g:/ && echo no hello pause
||
顺序执行多条命令,当碰到执行正确的命令后将不执行后面的命令
@echo off echo hello world || echo no hello pause
|
前一个命令的执行结果输出到后一个命令
@echo off dir *.* /s/a | find /c ".exe" pause
上述命令,会先执行dir命令,显示当前目录下的所有文件和子目录,然后把结果传给find命令,输出.ext文件的个数.
@echo off type abc.txt | find /c "efd" pause
上述命令,type命令显示abc.txt的内容,然后find命令统计在该文件中所有存在 efd 的行数.
>
清除文件中原有的内容在输入
echo hello world > abc1.txt
在当前目录下,生成abc.txt,内容为hello world
%
命令行传递给批处理程序的参数
- %0 批处理文件本身
- %1 第一个参数
- %2 第二个参数
- %* 从第一个参数开始的所有参数 在C盘根目录下创建demo.bat,内容如下
@echo off echo %0 echo %1 echo %2 echo %*
运行cmd,输入c:/demo.bat a b c d c d e cmd窗口显示
"C:\demo.bat" a b a b c d e f
set
设置变量
set #显示目前所有可用的变量,包括系统变量和自定义的变量 echo %SystemDrive% #显示系统盘盘符。系统变量可以直接引用 set p #显示所有以p开头的变量,要是一个也没有就设errorlevel=1 set p=aa1bb1aa2bb2 #设置变量p,并赋值为 = 后面的字符串,即aa1bb1aa2bb2 echo %p% #显示变量p代表的字符串,即aa1bb1aa2bb2 echo %p:~6% #显示变量p中第6个字符以后的所有字符,即aa2bb2 echo %p:~6,3% #显示第6个字符以后的3个字符,即aa2 echo %p:~0,3% #显示前3个字符,即aa1 echo %p:~-2% #显示最后面的2个字符,即b2 echo %p:~0,-2% #显示除了最后2个字符以外的其它字符,即aa1bb1aa2b echo %p:aa=c% #用c替换变量p中所有的aa,即显示c1bb1c2bb2 echo %p:aa=% #将变量p中的所有aa字符串置换为空,即显示1bb12bb2 echo %p:*bb=c% #第一个bb及其之前的所有字符被替换为c,即显示c1aa2bb2 set p=%p:*bb=c% #设置变量p,赋值为 %p:*bb=c% ,即c1aa2bb2 set /a p=39 #设置p为数值型变量,值为39 set /a p=39/10 #支持运算符,有小数时用去尾法,39/10=3.9,去尾得3,p=3set /a p=p/10 #用 /a 参数时,在 = 后面的变量可以不加%直接引用set /a p="1&0" #"与"运算,要加引号。其它支持的运算符参见set/? pause set p= #取消p变量 echo "设置p变量" @echo off set /p p= #设置p变量 pause echo "现在P的变量为" %p% pause 注意变量在 if 和 for 的复合语句里是一次性全部替换的,如 @echo off set p=aaa if %p%==aaa ( echo %p% set p=bbb echo %p% )
结果将显示aaaaaa因为在读取 if 语句时已经将所有 %p% 替换为aaa这里的"替换",在 /? 帮助里就是指"扩充"、"环境变量扩充"可以启用"延缓环境变量扩充",用 ! 来引用变量,即!变量名
@echo off SETLOCAL ENABLEDELAYEDEXPANSION set p=aaa if %p%==aaa ( echo %p% set p=bbb echo !p! ) pause
结果将显示aaabbb 还有几个动态变量,运行 set 看不到
@echo off echo "当前目录为:" %CD% echo "当前日期为:" %DATE% echo "当前时间为:" %TIME% echo "随机整数(介于0~32767):" %RANDOM% echo "当前的errorlevel值" %ERRORLEVEL% echo "当前命令处理器扩展名版本号:" %CMDEXTVERSION% echo %time% #精确到毫秒 pause
xcopy
文件拷贝
xcopy d:/mp3 e:/mp3 /s/e/i/y
复制 d:/mp3 文件夹、所有子文件夹和文件到 e:/,覆盖已有文件,加 /i 表示如果 e:/ 没有 mp3 文件夹就自动新建一个,否则会有询问
ping
运行cmd,输入
ping baidu.com
后续会发一篇批处理常用命令的综合运用