BAT 基础语法
命令 //功能
- 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