bat脚本批处理-入门

目录

打印helloworld

@ :关闭紧跟其后的一条命令的回显 

 @echo off和 @echo on、 echo off和 echo on

 自定义pause时提示内容

标题 title

注释

:: 注释内容

rem 注释内容

%行内注释%

goto 跳转的方式

ping

设置变量 set

接收用户输入输出

if语句

基本用法

 比较语句

 if defined  

 查看环境变量JAVA_HOME的值

if exist

for循环

搜索当前目录下所有文件

搜索当前目录下所有的txt文件

查看当前电脑有哪些磁盘

type file 打印文件file的内容

goto

start

打开记事本和计算器

调用其他bat脚本,并传参 

call

 调用当前脚本的标签

调用其他bat脚本

调用其他bat脚本,并传参

 ​​

延迟环境变量

未开启变量延时

 开启变量延时

& 、 | 、&&、II

&:可以同时执行多个命令 ,第一个命令执行失败了,也不影响后边的命令执行

 &&:可以同时执行多条命令,当碰到执行出错的命令后将不执行后面的命令,如果一直没有出错则一直执行完所有命令

|:管道符。前一个命令的输出为下一个命令的输入 

 ||:当一条命令失败后才执行第二条命令,当碰到执行正确的命令后将不执行后面的命令

设置字体颜色和窗体背景色:

 设置窗口大小

timeout延迟输出

常见问题:

bat批处理文件显示乱码


打印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

猜你喜欢

转载自blog.csdn.net/qq_40323256/article/details/123933217