版权声明:一起学习,一起成长,欢迎关注 奔跑的犀牛先生 https://blog.csdn.net/xuemanqianshan/article/details/88207795
1 标号 tag :
- bat的标号,一般是指 :
- 标号就是标签 tag
- 有效标号 :字母/数字,可以被goto识别
- 无效标号 : 非字母/非数字
- : 这一行命令是不会被执行的
- 而且,这个只代表这一行,不代表一个block
@echo off
set a=1
set b=2
goto judge
:main
set a=3
set b=4
echo a=%a%
echo b=%b%
pause
exit
:judge
echo test goto without if
echo a=%a%
echo b=%b%
echo thats ok
goto main
标号:和标志之间说是不可加空格,我实测是可以的
goto a
:a
echo a
goto b
: b
echo b
2 goto 语法,可以配合if 使用的,也可以独立使用
2.1 配合if 使用
-
语法格式:if var==a goto A
-
配合 :A
-
配合exit
2.2 goto 单独使用
- bat 是面向过程的语言
- goto 作为面向过程的特征,从一个语句指向另外一个语句行(line),而不是一个语句块(block)
- 而class 就是面对对象语言的特征,class 或 def 函数,定义了一个语句块 block
- bat语言,是一行一行的执行,goto也是指向行的跳转
- goto可以单独使用
- : 这一行命令是不会被执行的
- 而且,这个只代表这一行,不代表一个block
@echo off
set a=1
set b=2
goto judge
:main
set a=3
set b=4
echo a=%a%
echo b=%b%
pause
exit
:judge
echo test goto without if
echo a=%a%
echo b=%b%
echo thats ok
goto main
执行结果
3 if var ==a goto A 用法
-
语法格式:if var==a goto A
-
if "%var%"=="a" goto a
if "%var%"=="b" goto b
-
配合:A
-
配合pause 和 exit,pause 必须在exit前面才生效
@echo off
set a=2
if %a%==1 goto a1
if %a%==2 goto a2
:a1
echo a=1
pause
exit
:a2
echo a=2
pause
exit
4 if errorlevel 1 goto A用法
- 语法格式 if errorlevel 2 goto a
- 但是默认,if errorlevel 判断语句,用的是>= geq 判断的
- 方法1:这个是默认解决方法
- 所以errorlevel的值需要从大到小排列(从宽到严判断)
- 方法2:判断 %errorlevel% 变量的值,这个是基于== equ的判断
- if %errorlevel%==0 goto a
方法1:
实际用的是 >=
if errorlevel 2 goto a
if errorlevel 1 goto b
if errorlevel 0 goto b
方法2:
if %errorlevel%==0 goto a
if %errorlevel%==2 goto b
if %errorlevel%==1 goto c
第3个方法没看懂
3、使用逻辑连接符代替 if errorlevel,改成:
DEL /F /A /Q /S %1 && echo 删除成功&&goto 13 || echo 删除失败&&goto 14
5 call 命令
call [Drive:][Path] FileName [BatchParameters] [:label [arguments]
参数
[Drive:}[Path] FileName
- call和start最大的不同是2点:1 不重新起新窗口 2 需要等待call 调用的command执行完才继续往下
- call可以执行 command 文件/脚本 子程序(命令段)
- 具体语法如下
- 调用子程序,需要用 call :sub 关键字
- 配合 :sub
- 配合 goto :eof
call command
call 1.bat
call :sub
:sub
goto:eof *这个行内注释作为结尾*
6 call start 和直接调用其他 命令段,文件脚本的区别
- call,当前窗口执行,并且执行完了会返回
- start,新打开窗口
- 直接调用其他命令段,文件脚本,并且不会返回当前程序
- 可以分别吧 1.bat / call 1.bat / start bat 注释可试验
2.bat
@echo off
set a=1
set b=2
echo a=%a%
echo b=%b%
rem 1.bat
call 1.bat
rem start 1.bat
set a=3
set b=4
echo a=%a%
echo b=%b%
1.bat
@echo off
set a=999
if %a%==888 goto a1
if %a%==999 goto a2
:a1
echo a=888
pause
:a2
echo a=999
pause
直接调用
call
start
7 还有个其他的?: 截取字符串的操作
echo 截取前5个字符:
echo %ifo:~0,5%
8 start
start 在新窗口调用command