bat总结7 带标号: 的几种用法,if goto 和 call :sub

版权声明:一起学习,一起成长,欢迎关注 奔跑的犀牛先生 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 

7 exit 和 gotp:eof 的区别?

猜你喜欢

转载自blog.csdn.net/xuemanqianshan/article/details/88207795