BAT 基础语法

2023-06-07,,

命令  //功能

    echo  //标准输出命令 在CMD窗口中 显示echo 后的内容
    @   //关闭当前行的 回显    回显:源代码在 CMD 窗口中再次显示
    pasue     // 暂停程序 的执行
    call    //调用其他批处理  或着 代码块
    rem   // 注释信息的标识
    set    //定义一个变量
    goto  //跳转  用来作为流程控制
    start       //开始一个新程序 或 批处理
    if      // 条件判断
    for         //循环执行   循环的 基准的是 "行"
    setlocal   //设置 环境变量
    shift        //从指定参数出 开始执行
    "?" "*" 通配符
    "<" ">" ">>"    //重定向符号
    "|"           //管道符号   把前面得到结果 作为  后面的输入

对于不了解的命令参数 请在CMD中输入命令      命令名字 /? 后enter查看      for /?    cd /?   dir /?


1.echo

2.@

3.pause

5.rem

@echo off
rem 上面@ 关闭echo off 的回显 echo off 关闭 下面整个代码的回显
rem 注释代码标识 还能用 ::
echo hello world
:: 如果不暂停程序 执行后 直接结束 看不结果
pause

4.call

@echo off

:label6
echo 我是标签内的代码块 :: 请将echo6.bat 与该.bat文件 放同一个文件夹中
call echo6.bat
echo 调用 echo6.bat 成功
:: call 调用 代码块 需要有 : 号
call :label6
pause

6.set

@echo off
set var1=1
set var2=2
set var3=3
::调用变量请用 %%包围变量
echo 您设置的变量var1:%var1%
pause
echo 以var开头的变量有
set var
pause
echo 更改变量值
set var1=1111
echo 您设置的变量var1:%var1%
::清空变量
set var1=
set var2=
set var3=
::请看系统提示
set var
pause

7.goto

@echo off
:: call 转到指定标签处执行命令 执行完毕后 返回原处
call :lable3
:lable1
echo 这是lable1代码块中的内容显示
:: goto 跳转到 指定标签处 执行命令 不在返回原处
goto lable3
:lable2
echo 这是lable2代码块中的内容显示
:lable3
echo 这是lable3代码块中的内容显示
:lable4
echo 这是lable4代码块中的内容显示
pause

8.start

@echo off
:: start 可以启动快捷方式形式的exe文件
start D:\UserData\Pictures\TIM
pause
call D:\UserData\Pictures
pause
::路径最好不要有中文 有空格加引号
call "D:\Program Files (x86)\Tencent\TIM\Bin\QQScLauncher.exe"
pause
start echo6.bat
pause

9.if

@echo off
if 1==1 echo 值相同
if aa==aa ( echo 字符相同 )else ( echo 字符不同 )
set /p num1=请输入第一个数值:
set /p num2=请输入第二个数值:
rem 建议if else 写在一行
rem 小于 大于 等等比较运算符 请查看 if /? 帮助
if %num1% LSS %num2% ( echo 数字2大 ) else if %num1% EQU %num2% ( echo 一样大 ) else (echo 数字1大)
pause
if exist if6666.bat ( echo 文件存在 ) else echo 文件不存在
pause

10.for

15."|"

统计.bat所在目录的下的所有文件

@echo off
set /a sum=0
for /f %%i in ( 'dir /b /a-d' ) do (
set /a sum=sum+1
)
echo 共有%sum%个文件
pause
:: 来个简单的
dir /b /a-d | find /v /c ""
pause

11.setlocal

可以设置 环境变量  和 变量延时

setlocal enabledelayedexpansion

用于开启变量延迟,这是告诉解释器,在遇到复合语句的时候,不要将其作为一条语句同时处理,而仍然一条一条地去解释。但是这时必须用!str!来引用变量,如果仍然用%str%引用是不起作用的

()中的命令相当与一条命令   你在一条语句中即赋值改变 又调用变量 你说 变量值该是原来 还是该 你刚刚赋值的    需要开启变量延时 告诉程序 我要 及时跟新后的

@echo off
echo disabledelayedexpansion
set str=old
if %str% == old (
set str=new
echo %str%
)
pause
echo enabledelayedexpansion
setlocal enabledelayedexpansion
set str=old
if %str% == old (
set str=new
echo !str! ::开启请用!var!
echo %str% ::未变
)
pause

12.shift

@echo off
:begain
if "%1"=="" goto end
echo %1 %2 %3
shift
goto begain
:end
pause

该代码想要测试出效果需要
在代码所在的目录下  上面的地址栏窗口 输入cmd 然后enter

在出现的CMD窗口中 输入 xxx是你对上面代码的命名
xxx.bat 1 2 3 4

结果如下

代码中

%1 %2 %3 ...  是 从当前命令行获取到的参数    其取值范围是 1-9

shift 表示

    shift 是将所有参数往前移动一位。
    shift /2 是从第2个参数开始将后面的参数全部往前移动一位,但不影响前面的参数位置(即:不影响1)
    shift /3 是从第3个参数开始将后面的参数全部往前移动一位,但不影响前面的参数位置(即:不影响1,2)
    shift 的取值范围是 0-8

将当前命令行 后面的参数位置给bat后 发现shift后并没有被执行   估计 都作为了字符串处理

13 "?"  "*"

@echo off
::? 表示匹配任意一个字符
::下面代码表示 列出 文件名为2个字符的后缀为.bat的文件
dir ??.bat
pause
:: * 表示匹配任意数量个任意字符
::下面代码表示 列出 所有的.bat 的文件
dir *.bat
pause

14 "<" ">" ">"

@echo off
dir /b /a-d>FileList.txt
set /a sum=0
for /f %%i in ( ' dir /b /a-d ' ) do set /a sum=sum+1
echo %sum%
echo 当前目录下共有%sum%个文件>> FileList.txt
pause
set /p =输入不换行,<nul
set /p =继续输入,<nul
set /p =你换echo试试<nul
set
pause>nul 2>&1

重定向 标准输出是到CMD窗口 用1 默认  表示正常输出 2表示 出错提示

< 定向

输入不换行 利用set /p 提示功能 不定义变量 给其赋值nul   空 存在 
>定向到 txt 中 如果txt 中原来有内容将会 清空录入

>>定向到 txt中 在原来的基础上 追加内容

pause>nul 2>&1  &表示链接符     相当于 1>null 2>null  建议 pause>nul 2>nul

BAT 基础语法的相关教程结束。

《BAT 基础语法.doc》

下载本文的Word格式文档,以方便收藏与打印。