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