批处理命令 bat文件

本文详细介绍了DOS批处理命令的使用,包括echo、REM、SET、IF、GOTO、FOR等核心命令,以及条件判断、循环控制和文件操作。还讲解了变量延迟、命令返回值和重定向等高级特性,并提供了实用示例,帮助读者掌握批处理脚本的编写技巧。
摘要由CSDN通过智能技术生成

批处理

  • 定义:批处理命令是dos系统下的命令合集,还可以使用if goto start等控制命令,实现业务逻辑
  • 语法同dos命令

命令

  • echo 命令:
    1. echo on \ echo off 打开或关闭回显。回显是指执行的命令会显示在命令窗口上。但是有个问题是,关闭回显后无法在bat执行过程中输入数据

  • REM:注释作用,一行后面的都是注释掉的内容(可用::代替,但是建议使用ram,兼容性更好)

  • SET:
    1. 用法:set k=v 。如果v为空,则是重置k的值
    2. set /p k=“输入提示词”
    3. set /a k=表达式 表达式是计算式子,如 2*3、1+1
    4. 支持运算符前置:a=a2 等价于 a=2

  • IF:
    1. 字符串的比较 :if %val%==m_val (// TODO)
    2. 数字的比较:if %num1% EQU %num2% (// TODO)
    3. if 可接 else 后可再接 if
      set /p a=input a:
      set /p b=input b:
      
      if %a% EQU %b% (
      echo 123
      ) else if %a% GTR %b% (
      echo 234
      ) else (
      echo 345
      )
      
    4. 比较运算符
      EQU - 等于
      NEQ - 不等于
      LSS - 小于
      LEQ - 小于或等于
      GTR - 大于
      GEQ - 大于或等于
      
    5. 判断文件是否存在
      if exist E:\cmder (
      echo yes
      ) else (
      echo no
      )
      if not exist filname echo no
      
    6. 判断变量是否定义
      if defined var (// TODO)
      
    7. 判断返回值(上一条命令的结果)。一般的返回值为0或者1,0表示执行成功,1表示失败
      echo 123 >> .\file.txt;
      if errorlevel 0 (
      echo success
      ) else (
      echo error
      )
      
      上一条命令的类型有很多种,命令的返回值类型如下1

  • GOTO:将程序跳转到指定标签
    set /p a= input a:
    if %a% == 1 (
    goto yes
    )
    echo no
    goto end
    :yes
    echo yes
    :end
    

  • FOR:
    1. 对一组文件的每个执行命令
      set filePath=.\shellFile\
      for %%i in (1 2 3 4 5) do bash %filePath%test%%i.sh
      
    2. for /L %%var in (start , step , end) do // TODO /L表示步进的循环
      for /L %%i in (1, 1, 5) do echo %%i
      
    3. for /R <DRIVE:>path %%i in (set) do // TODO /R后接文件路径表示遍历path下的文件合集,set为*可遍历文件树下的所有文件,set为 . 会遍历文件树下的所有文件夹
      for /R .\ %%i in (*) do echo %%i
      
    4. for /F %%i in (filename) do // TODO /F 用于读取文件(filename),如果没有/F 会直接看作是"filename"字符串。
      /*
      	test.txt
      	1,1 2,1 3,1 4,1
      	A1,2 2,2 3,2 4,2
      	1,3 2,3 3,3 4,3
      	A1,4 2,4 3,4 4,4
      */
      rem 如上建立一个文件
      for /F "tokens=2" %%i in (test.txt) do echo %%i
      rem 按照空格为分隔符输出第二列字符串
      for /F "delims=, tokens=2" %%i in (test.txt) do echo %%i
      rem 也可以如上用delims指明分隔符,用“,”做分割,再根据tokens输出
      for /F "eol=A skip=1 delims=, tokens=2" %%i in (test.txt) do echo %%i
      rem eol用于忽略开头是A的行(但是只支持单字符)
      rem skip可以跳过开头的几行
      
      /F 参数除了处理文件也可以处理字符串,将filename换成目标字符串再加个双引号即可
      for /F "tokens=*" %%i in ("1 2 3 4") do echo %%i
      
      /F 支持多文件操作的,以空格为分隔符。但是如果文件中有空格怎么办?这时需要用到 usebackq 参数,可以将文件用 “” 双引号给包含进去。
      for /F %%i in (file1.txt file2.txt) do echo %%i
      for /F "usebackq" %%i in ("file1.txt" "file2.txt" "file 3.txt") do echo %%i
      

特殊语法

  • 变量延迟特点:变量的值在一个语句执行完之前不会改变
    见如下用例:
    set a=1
    set a=2&echo %a%
    echo %a%
    
    rem 输出结果:
    rem 1
    rem 2
    

因为有 & 符号让 (set a=2&echo %a%) 语句在一次命令中执行,此时a的值还是1。此行为被成为变量延迟


  • %systemroot% 变量值是系统根目录 一般是C盘windows目录

  • 文件里有回车即表示是一条新的命令,操作符中间的回车会被忽略

  • rem 注释也可以被 :: 代替。:: 即是不规范的标签命名方式,因为标签所在的这一行不会被执行

  • 命令行最多可接受9个参数给批处理文件,从%1~%9,%0是命令自身。如果读取的%n,参数n不存在,则默认是空

  • 隐藏命令:@ + 命令 。可以把命令隐藏不回显到输出流上,用echo off同样可以实现,@需要在每个命令前加一个

  • && || 对命令执行的判断。 命令执行后有执行成功和失败,之前可以用errorlevel判断成功与否,&& || 同样可以。在命令执行结束后如果成功走&&后的命令,执行失败走||后的命令。
    echo 111 && echo success
    

  • 管道 | 。把前一个命令的执行结果发送给后一个命令

  • 分行符 & 。几个命令写在同一行用&分隔
    echo 1 & echo 2
    

  • 分行符 ^ 。用于一个命令内部,将一个命令写成几行
    ec^
    ho 1^
    11
    
  • 转义符 ^
    rem echo &
    echo ^&
    
    比如想输出&,但是&是命令符,会被识别成分行符,想输出的话需要在前面加个^,转义成字符。

  • 重定向 >> 、>、<

    >>用于将命令输出追加到文件目标文件中
    > 输出覆盖目标文件
    < 从目标文件中读取数据

    echo aaa >> 1.txt
    echo  bbb > 1.txt
    
    rem 重定向读取
    @set fileName=redirect.txt
    @echo 1 > %fileName%
    @set /p num1=<%fileName%
    @echo %num1%
    @echo 2 > %fileName%
    @set /p num2=<%fileName%
    @echo %num2%
    @set /a num3=num1 + num2
    @echo %num3%
    

  • pause>nul 命令执行完后,会直接执行结束,有时希望在命令结束后等待输入再结束,此时在程序最后加一个pause。pause会转换成提示输入的话,如果不想让这句话显示在输出流里,可以用>重定向到某个文件或者到nul里。nul是空的意思,即到空文件中。

  • 有不懂的命令,可以在命令关键字后面加 /?,执行后会输出该命令的用法

  1. 命令返回值
    backup
    0 备份成功
    1 未找到备份文件
    2 文件共享冲突阻止备份完成
    3 用户用ctrl-c中止备份
    4 由于致命的错误使备份操作中止
    diskcomp
    0 盘比较相同
    1 盘比较不同
    2 用户通过ctrl-c中止比较操作
    3 由于致命的错误使比较操作中止
    4 预置错误中止比较
    diskcopy
    0 盘拷贝操作成功
    1 非致命盘读/写错
    2 用户通过ctrl-c结束拷贝操作
    3 因致命的处理错误使盘拷贝中止
    4 预置错误阻止拷贝操作
    format
    0 格式化成功
    3 用户通过ctrl-c中止格式化处理
    4 因致命的处理错误使格式化中止
    5 在提示“proceed with format(y/n)?”下用户键入n结束
    xcopy
    0 成功拷贝文件
    1 未找到拷贝文件
    2 用户通过ctrl-c中止拷贝操作
    4 预置错误阻止文件拷贝操作
    5 拷贝过程中写盘错误 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值