目录
@echo off和 @echo on、 echo off和 echo on
&:可以同时执行多个命令 ,第一个命令执行失败了,也不影响后边的命令执行
&&:可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令
||:当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令
打印helloworld
使用“echo 字符串”来在dos窗口打印字符串。
pause可使窗口不会执行完命令就马上关掉,而是输入‘请按任意键继续...’,然后等待用户按下键盘任意键,才会关闭窗口。不加pause,则会打开dos窗口,并会瞬间关闭窗口,导致我们来不及看到任何东西。
echo helloworld!
pause
@ :关闭紧跟其后的一条命令的回显
如果不想在命令行窗口中显示出当前正在执行的命令,可在当前命令前面加一个@即可,如下:
@echo off和 @echo on、 echo off和 echo on
如果想让所有的命令在执行时都不显示在dos窗口,可直接在首行添加 @echo off 即可,如下:
如果想指定某一段命令在执行时不打印当前命令在dos窗口时,可先用@echo off来关闭命令回显,再用@echo on来启动命令回显,如下:
echo 1
@echo off
echo 2
echo 3
@echo on
echo 4
pause
如果不给@echo off和@echo on加上@,即直接用echo off和echo on,则:
- echo off:关闭其后面所有命令的回显(不包括本身这条命令)
- echo on:打开其后面所有命令的回显(不包括本身这条命令)
自定义pause时提示内容
@echo off
echo helloworld!
echo 随便按什么键来退出... & pause >nul
可以通过&来将两行命令放在一行执行
pause >nul就是让窗口暂停关闭,但是不会打印默认的‘请按任意键继续...’的提示
这样的话就等价于以下写法:
标题 title
@echo off
title 这是标题
echo helloworld!
pause
注释
:: 注释内容
::这是注释
echo helloworld!
pause
rem 注释内容
rem注释时,不执行后面的语句,但会显示在命令行;
注意:不能出现重定向符号(>,>>,>&,<,<&等)和管道符号(I)
%行内注释%
注意:不能出现重定向符号和管道符号
echo hello %大家好,这是行内注释~%world!
pause
goto 跳转的方式
@echo off
echo helloworld!
goto main
说明:这个脚本可以多行注释
作者:李疆
:main
echo 大家好
pause
ping
ping 域名/ip地址
ping www.baidu.com
pause
无休止地ping,加个 -t 即可。Ctrl+C退出
设置变量 set
@echo off
set a=1
set b=6
set c=%a%+%b%
echo %c%
pause
接收用户输入输出
在变量前面加上/p即可
@echo off
set /p param=请输入:
echo 您输入了:%param%
pause
如果不要/p,效果如下:
if语句
基本用法
@echo off
set /p a=请输入1:
if %a% == 1 (
echo 您输入了1
) else (
echo 您没有输入1
)
pause
@echo off
set /p a=请输入1或2:
if %a% == 1 (
echo 您输入了1
) ^
else if %a% == 2 (
echo 您输入了2
) ^
else (
echo 您没有输入1或2
)
pause
比较语句
- equ - 等于
- neq - 不等于
- lss - 小于
- leq - 小于或等于
- gtr- 大于
- geq - 大于或等于
if defined
判断某个变量是否已经被赋值
查看环境变量JAVA_HOME的值
打开环境变量:win+r 输入sysdm.cpl ,点击【高级】-【环境变量】
@echo off
if defined JAVA_HOME echo %JAVA_HOME%
pause
获取当前bat文件完整路径和扩展名 %0
@echo off
echo %0
pause
if exist
判断驱动器、文件或文件夹是否存在
@echo off
if exist G:\keshan\testbat\test.bat (echo 该路径下存在test.bat) else (echo 该路径下不存在test.bat)
pause
for循环
for /L %%i in (起始值,步长,结束值) do ()
@echo off
for /L %%i in (0,1,7) do (
echo %%i
)
pause
@echo off
for %%i in (ABC) do echo %%i
pause
搜索当前目录下所有文件
@echo off
for %%i in (*.*) do echo "%%i"
pause
搜索当前目录下所有的txt文件
@echo off
for %%i in (*.txt) do echo "%%i"
pause
如果不想输出后缀,把 echo "%%i"改为 echo "%%~ni"即可,如下:
@echo off
for %%i in (*.txt) do (
echo %%i
echo %%~ni
)
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
type file 打印文件file的内容
@echo off
type a.txt
pause
注意:如果输出的中文是乱码,将a.txt的编码由默认的utf8改为 ANSI即可
发现没有换行,用echo.或者echo/即可换行,如下:
goto
@echo off
goto label
echo 1
:label
echo 2
pause
@echo off
:start
cls
set /p numis=请输入数字1或2:
if %numis% ==1 goto 1
if %numis%==2 (goto 2) else (echo 输入有误!&&pause>nul&&goto start)
:1
echo 你输入的是1
pause &&goto start
:2
echo 你输入的是2
pause &&goto start
start
start会重新打开一个新的dos窗口。
开启一个新线程来执行该程序,原程序不受影响继续执行
打开记事本和计算器
start notepad
start calc
调用其他bat脚本,并传参
start只能把参数或变量传给被调用的批处理,却不能回传参数或变量。如以下例子中的变量b就没能传回原窗口。
注意:如果把start改为call,就可以获取到传过来的变量b
test.bat:
@echo off
set a=1
start b.bat hello world 你好呀
echo 啦啦啦啦
echo %b%
pause
b.bat:
@echo off
echo %1 %2
echo %3
echo %a%
set b=1
pause
call
call命令用来从一个批处理脚本中调用另一个批处理脚本或当前脚本标签,并且不终止父批处理程序(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)
换句话说就是:调用子脚本,在当前程序中运行子脚本代码,子脚本执行完后继续执行本程序之后的代码
调用当前脚本的标签
@echo off
call :label
echo 1
:label
echo 2
pause
调用其他bat脚本
@echo off
echo helloworld
call b.bat
echo 你好呀
pause
调用其他bat脚本,并传参
call调用不仅可以把参数或变量传给被调用的批处理,而且被调用的批处理也可以设置参数或变量以便回传
test.bat:
@echo off
set a=1
call b.bat hello world 你好呀
echo 啦啦啦啦
echo %b%
pause
b.bat:
@echo off
echo %1 %2
echo %3
echo %a%
set b=1
pause
延迟环境变量
在批处理中开启或关闭延迟环境变量用setlocal命令:
- setlocal EnableDelayedExpansion //开启延迟环境变量
- setlocal DisableDelayedExpansion //关闭延迟环境变量。默认
未开启变量延时
@echo off
set str=AAA
if %str%==AAA (
set str=BBB
echo %str%
)
echo %str%
pause
开启变量延时
@echo off
::开启延迟环境变量
setlocal EnableDelayedExpansion
set str=AAA
if %str%==AAA (
set str=BBB
::得用一对!!号
echo !str!
echo %str%
)
echo !str!
echo %str%
pause
& 、 | 、&&、II
- &:可以同时执行多个命令 ,第一个命令执行失败了,也不影响后边的命令执行
- &&:可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令
- |:管道符。前一个命令的输出为下一个命令的输入
- ||:当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令
&:可以同时执行多个命令 ,第一个命令执行失败了,也不影响后边的命令执行
@echo off
ping 1 & ping 127.0.0.1
pause
&&:可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令
|:管道符。前一个命令的输出为下一个命令的输入
dir
dir | find "bat"
pause
||:当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令
@echo off
ping 1 || ping 127.0.0.1
pause
设置字体颜色和窗体背景色:
可通过color/?命令查看颜色,如下:
- color后面只有1位数字或字符,则表示默认背景色为黑色,前景色为1
- color后面有2位数字或字符,则第一位表示背景色,第二位表示前景色
@echo off
color 2
pause
设置窗口大小
输入@mode con lines=10 cols=45,表示窗口有10行的高度,有45个字符的宽度。
@echo off
@mode con lines=10 cols=45
pause
timeout延迟输出
@echo off
timeout 3
echo 延迟3秒打印了我
pause
注意:如果用timeout 3 >nul,则可以不显示“等待3秒,按一个键继续...”的字样
常见问题:
bat批处理文件显示乱码
解决办法:右键该bat文件-【编辑】-【文件】-【另存为】-编码选择ANSI