注意:编辑bat文件请使用ANSI编码(不然会出现中文乱码)
1、语句注释::
rem 命令行注释,可以回显(语句会在命令行中显示);
::两个冒号,效果同上,但不会回显。(冒号后加任意非字母数字字符都可起到注释作用)
2、暂停 pause
pause 暂停,命令行中出现"请按任意键继续..."
自定义暂停时的文本,如下:
::pause>nul,隐藏原暂停文本echo 这里是自定义文本! & pause > nul
复制代码
3、开启关闭回显
@置于语句前则该条语句不会回显(无视 echo on)
echo off 关闭回显功能,直到出现 echo on,但其本身会回显,故其之前往往和 @一起使用,即 @echo off(关闭所有回显功能)
4、新建文件、增加文件内容
@echo offrem 格式:echo 文件内容>文件路径echo @echo off>test1.bat::其中>>在文末添加,>覆盖原内容echo echo this is test>>test1.batecho pause>>test1.batrem 显示该文件内容type test1.batpause
复制代码
5、设置标题 title
@echo off::title设置标题title 我测试一下!pause
复制代码
6、设置颜色
color 0A
7、if 语句判断
::if常规用法,注意空格@echo off:startset /p a=if not %a%==1 ( echo 请输入1 goto start) else ( echo 输入正确)pause>nul
@echo offif not exist d:\test.bat ( echo @echo off>d:\test.bat) else ( del d:\test.bat)pause>nul
@echo offset a=1if defined a ( echo 已定义a) else ( echo 未定义a)pause>nul
@echo offset a=123set b=abcset c=12::/i字符串大小写忽略if /i %b% equ ABC ( if %a% geq %c% ( echo %a%^>=%c% ) else ( echo %a%^<%c% )) else ( echo %b%不等于ABC)pause>nul
复制代码
如上的操作数可以是字符串、数值、变量;当参与比较的字符串是字符串时,将被转换为对于的 ASCII 码进行比较;比较运算符有如下:
if 语句中的'与'、'或'、'非'逻辑判断
::'与'一般用if嵌套实现@echo offset /p a=::当a小于10且大于0if %a% lss 10 if %a% gtr 0 echo 输入的是0-10pause
::'非'用not可以实现@echo offset /p a=::a不小于10if not %a% lss 10 ( echo 输入的是不小于10 )pause
::'或'实现一:使用if嵌套(代码简洁但逻辑不太好理解)@echo offset /p a=请输入a:set /p b=请输入b:::a小于5或b小于5时if %a% lss 5 (echo a小于5或b小于5) else (if %b% lss 5 (echo a小于5或b小于5) else (echo a、b都不小于5))pause
::'或'实现二:使用额外变量标记结果,再判断该变量(逻辑简单但代码多)@echo offset /p a=请输入a:set /p b=请输入b:::a小于5或b小于5时set flag=0if %a% lss 5 set flag=1if %b% lss 5 set flag=1if %flag% equ 1 ( echo a小于5或b小于5 ) else ( echo a、b都不小于5 )pause
复制代码
8、goto 语句跳转
@echo off::使用冒号加标记名作为goto语句的标记:startset /p param=if %param%==4 (echo 请不要输入4! & goto start) else (echo %param%)pause
复制代码
9、set 用法之接收用户输入数据
@echo offset /p param=请输入密码:echo %param%pause
复制代码
10、set 用法之定义变量和延迟赋值
::输出为1@echo offset a=1set a=2&echo %a%pause
注意:批处理在运行“set a=2&echo %a%”之前,会先把这一句整句读取并做了预处理,即对变量a赋了值,那么%a%值为1,为解决该问题,批处理设计了变量延迟。也就是说,在读取了一条完整的语句之后,不立即对该行的变量赋值,而会在某个单条语句执行之前再进行赋值,具体实现如下:
::输出为2@echo off&setlocal enabledelayedexpansionset a=1set a=2&echo !a!pause
注意:'变量名=值'中间不要有空格
@echo off::将0赋值给bset b=0echo b:%b%::将空格和0赋值给aset a= 0echo a:%a%::无法赋值set c =0echo c:%c%pause
复制代码
11、set 用法之系统变量
@echo off::查看所有环境变量echo ----------------ALL----------------------setecho ----------------END----------------------::查看环境变量JAVA_HOME的值if defined JAVA_HOME ( echo JAVA_HOME:%JAVA_HOME% ) else ( echo 未定义JAVA_HOME )pause
复制代码
12、set 用法之定义数字表达式
@echo offset a=1&set b=6set c=%a%+%b%::输出1+6echo %c%set d=a+b::输出a+becho %d%set /a e=a+b::输出7echo %e%pause
复制代码
13、for 语句循环
@echo off::关键字for、in、do必有,括号必有::分隔符可以是逗号、分号、等号、空格::输出为A换行1换行B。。。for %%i in (A,B,C) do echo %%i & echo 1pause>nul
@echo off::找出D盘下所有文件for %%i in (d:\*.*) do echo "%%i"pause
@echo offset str=c d e f g h i j k l m n o p q r s t u v w x y zecho 当前硬盘的分区有:for %%i in (%str%) do if exist %%i: echo %%i:pause
@echo off::找出当前目录下文件名为四个字符的txt文件for %%i in (????.txt) do echo "%%i"pause
复制代码
14、变量 %0--%9
%0 指该文件本身,%1--%9 为接收到的参数,如下例子中子程序的 %1 即为主程序传输的 param1,%2 即为 param2
::该文件名为test.bat@echo offecho 这是主程序第一个输出timeout 2start test1.bat param1 param2timeout 2echo 这是主程序第二个输出pause
::该文件名为test1.bat@echo offtimeout 2echo 这是子程序第一个输出echo 这是接收到的第一个参数%1 和第二个参数%2pause
@echo offset /p param=if %param%==4 (echo 请不要输入4!) else (echo %param%)::%0在当前窗口重新调用自身%0
复制代码
评论