一些批处理命令,原作者不详,整理备忘。
@echo off rem 从本行开始关闭回显
echo. rem 输出一个空白行,echo, echo; echo+ echo[ echo] echo/具有同等效果
%errorlevel% rem 查看命令执行结果,默认为0,一般执行错误为1
dir /a:-d /b /s . rem 显示当前目录下所有,包括子目录里的文件
type boot.ini rem 显示boot.ini文件内容
copy con input.txt rem 复制屏幕输入到input.txt文件,按ctrl-z结束输入。con代表屏幕,prn代表打印机,nul代表空设备
copy 1.txt + 2.txt 3.txt rem 合并1和2文件的内容,保存为3
copy 1.txt + rem 复制文件到自身,实际为修改文件日期
find “abc” c:\user.txt rem 查找字符串,找不到则errorlevel为1;/i 忽略大小写 /c 统计个数
more c:\user.txt rem 逐屏显示文件内容
& 顺序执行多条命令,不论上一条时候成功
find “abc” c:\user.txt && echo OK rem && 顺序执行多条命令,碰到出错命令则终止
find “abc” c:\user.txt ||echo NG rem || 顺序执行多条命令,碰到正确命令就停止
dir /s . | find /c “.exe” rem 管道命令,统计当前目录及子目录下所有exe文件
copy 1.txt F: > nul 2> nul rem 重定向所有信息至nul。标准的输入,输出和错误输出分别表示为STDIN,STDOUT,STDERR,也可以用0,1,2来表示
echo ^^W ^> ^W > test.txt rem ^是转义字符,把所有的命令符号如>转义成文本字符
‘ipconfig ^| find /i “ip address”’ rem 单引号将多个命令组成的复合语句作为一条语句;双引号表示其内部的内容为文本符号,或用来连接以空格间隔的字符串
date < date.txt rem 从文件获取输入
test.bat “good” “for” “you”
%0 批处理文件本身,即test.bat
%1 第一个参数,即”good”
%2 第二个参数,即“for”
%* 从第一个参数开始的所有参数,即“good”,“for”,“you”
%~1 – 删除引号
%~f1 – 将%1扩充到一个完全合格的路径名
%~d1,%~p1,%~n1,%~x1,%~s1,%~a1,%~t1,%~z1,%~$PATH:1
%~dp1 – 将%1扩充到驱动器号和路径
%~nx1 – 将%1扩充到文件名和扩展名
if %1==”good” echo good
/i 忽略大小写 exist,not exist
if exist c:\users\test.txt (echo “good for you”)
setlocal enableextensions
endlocal
setlocal enableextensions|disableextensions|enabledelayedexpansion|disabledelayedexpansion
用到命令扩展的批处理,建议开头加上setlocal enableextensions确保程序正确执行
变量在if和for复合语句中是一次性替换的。如果想启用enabledelayedexpansion,注意后续引用使用!p!而不是%p%
echo %p:~0,3% rem 显示变量p的前三个字符 %name~start,count%
echo %p:~-2% rem 显示p最后2个字符
echo %p:~0,-2% rem 显示p除了最后2个字符以外的所有字符
echo %p:aa=c% rem 替换p中所有aa为c
echo %p:*aa=c% rem 替换第一个aa及之前的所有字符为c
set /a p=39/10 rem /a 表示支持表达式运算
set /p var=请输入 rem /p表示接受输入复制给var
choice rem 让用户输入一个字符,返回errorlevel为1,2,3,4
assoc .txt rem 显示扩展名.txt关联的文件类型
ftype txtfile rem 显示txtfile文件类型关联的执行程序参数
for /r d: %%i in (*.txt) do find “abc” %%i rem 对d盘所有目录下txt文件查找abc
for /f %%i (‘set’) do echo %%i rem 输出set命令的结果
for /f “tokens=1,2,3 delims=-“ %%a in (‘date /t’) do ( rem 每行分成123列,第一列给a
echo %%a rem 如果是tokens=2*,则第二列给a,后面的列都给b
echo %%b rem 第二列给b
echo %%c) rem 第三列给c
xcopy d:\mp3 e:\mp3 rem 复制文件和目录树