• bat脚本总结


    1 基础

    1.1 关闭代码执行输出,否则每一行都会替换结果后输出

    @echo off
    
    
    • 1
    • 2

    1.2 goto, 用冒号开头标识一个起点,使用goto语句跳转到flag位置执行

    :flag
    goto flag
    
    • 1
    • 2

    1.3 注释的两种方法

    @rem hello
    ::hello
    
    • 1
    • 2

    1.4 变量声明

    @rem 以下三种方式都可以, 不过需要注意类型
    set "result=111"
    set result=111
    set result="111"
    
    @rem 设置为空变量
    set "result="
    set result=""
    
    @rem 字符串拼接
    @rem 1.这种方式输出的 "111"222
    set result="111"
    set "result1=%result%222" 
    @rem 2.这种方式输出的 111222
    set result=111
    set "result1=%result%222"
    @rem 3.使用 %, 输入为 Hello World
    set str1=Hello
    set str2=World
    set result1=%str1% %str2%
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    1.5 延迟解析, 动态替换

    输出结果为
    Hello
    Hello
    Hello
    for循环中设置的不生效

    @echo off
    set var=Hello
    
    for %%a in (1 2 3) do (
        set var=World
        echo %var%
    )
    
    echo %var%
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    开启延迟扩展, 注意%要换成!

    @echo off
    setlocal enabledelayedexpansion
    
    set var=Hello
    
    for %%a in (1 2 3) do (
        set var=World
        echo !var!
    )
    
    echo !var!
    endlocal
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    1.7 常用命令对比

    Windows命令行功能描述Linux终端
    cd切换工作目录cd
    dir列出当前文件夹下所有文件ls [-lh]
    type查看文件内容cat
    md/mkdir创建目录mkdir
    del删除文件rm
    rd删除目录rm -r
    copy/xcopy拷贝cp [-r]
    cls清屏clear
    findstr根据关键字查找grep
    move/rename移动/重命名mv/rename
    tasklist查找进程ps [-ef]
    taskkill杀死进程kill [-9]

    1.8 for循环

    1.8.1 遍历一组数字

    @echo off
    @rem 输出1,2,3,4,5
    for /l %%i in (1, 1, 5) do (
        echo %%i
    )
    @rem 输出1,1,5, 注意这里加不加逗号没区别, 因为逗号和空格等效
    for %%i in (1, 1, 5) do (
        echo %%i
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这个例子中,/l参数表示这是一个数字范围,(1, 1, 5)表示从1开始,每次增加1,直到5。%%i是一个变量,它的值会在每次循环时被设置为当前的数字。

    1.8.2 遍历一组字符串

    同上

    @echo off
    for %%i in (A B C D E) do echo %%i
    
    • 1
    • 2

    在这个例子中,for循环会遍历括号中的每个字符串,并在每次循环时将%%i设置为当前的字符串。

    1.8.3 遍历文件

    可以指定目录,相对路径(d:\test*.txt)和绝对路径(test*.txt)都行

    @echo off
    @rem 只遍历单层目录
    for %%i in (*.txt) do echo %%i
    
    @rem 只遍历目录及其子目录, 注意打印的绝对路径
    for /R %%i in (*.txt) do echo %%i
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这个例子中,for循环会遍历当前目录下的所有.txt文件,并在每次循环时将%%i设置为当前的文件名。

    1.8.3 遍历文件夹

    @echo off
    @rem 只遍历单层目录
    for /d %%i in (*) do echo %%i
    
    @rem 只遍历目录及其子目录
    for /d /R %%i in (*) do echo %%i
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这个例子中,/d参数表示这是一个目录,for循环会遍历当前目录下的所有子目录,并在每次循环时将%%i设置为当前的目录名。

    1.8.4 遍历命令的输出

    @echo off
    for /f "tokens=*" %%i in ('dir /b') do echo %%i
    
    • 1
    • 2

    在这个例子中,/f参数表示这是一个文件或命令的输出,"tokens=*"表示将每行的所有内容作为一个整体处理,'dir /b’是一个命令,它会列出当前目录下的所有文件和目录。for循环会遍历这个命令的输出,并在每次循环时将%%i设置为当前的行。

    1.8.5 for /f 使用实例

    text.txt内容如下

    111,aaa,AAA
    222,bbb,BBB
    333,ccc,CCC
    
    • 1
    • 2
    • 3
    @echo off
    @rem 按照逗号分割, 注意delims和token之间要有一个空格
    for /f "delims=, tokens=1,2 " %%a in (test.txt) do (
        echo %%a %%b
    )
    
    @rem 分割一次
    for /f "delims=, tokens=1,*" %%a in (test.txt) do (
        echo %%a %%b
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    for /f命令在Windows批处理脚本中用于处理文件、命令的输出或字符串。除了delims和tokens参数,它还支持以下参数:

    • eol:定义行结束字符,通常用于指定注释字符。例如,eol=#将会忽略以#开头的行。

    • skip:跳过指定数量的行。例如,skip=2将会跳过前两行。

    • usebackq:改变处理文件名、命令字符串和数据字符串的方式。默认情况下,双引号用于文件名,单引号用于命令字符串,无引号用于数据字符串。使用usebackq后,反引号用于文件名,双引号用于命令字符串,单引号用于数据字符串。

    这些参数可以组合使用,例如:

    for /f "eol=# tokens=1,2 delims=, skip=2 usebackq" %%a in ("test.txt") do (
        echo %%a
        echo %%b
    )
    
    • 1
    • 2
    • 3
    • 4

    这个命令将会跳过test.txt文件的前两行,忽略以#开头的行,然后按照逗号分割每一行,并打印出分割后的第一部分和第二部分。

    1.9 字符串操作

    你可以使用%variable:~start,length%语法来截取字符串。这里的start是开始位置(从0开始),length是截取的长度。

    例如,假设你有一个变量str,其值为Hello, World!,你可以使用以下命令来截取并打印出str的前5个字符:

    set str=Hello, World!
    echo %str:~0,5%
    
    • 1
    • 2

    这将会输出Hello。

    如果你想从特定位置开始截取到字符串的末尾,你可以省略length参数。例如,以下命令将会截取并打印出str从第7个字符开始到末尾的部分:

    echo %str:~7%
    
    • 1

    这将会输出World!。

    注意,这种截取方式是从0开始计数的,所以str:~7实际上是从str的第8个字符开始截取的。

    2 代码实例

  • 相关阅读:
    拖拽式表单开源表单设计器的特点是什么?
    关于SQL优化
    HttpRunnerManager(四) - 完成安装注册&登录
    一道dp的三次优化(时间+空间)
    微服务之Eureka
    使用Keras的面部表情识别
    【JavaEE】JUC(java.util.concurrent)的常见类以及线程安全的集合类
    深度学习环境搭建
    算法笔试ACM模式如何输入
    【夜读】自我管理的8个小习惯,养成受用一生
  • 原文地址:https://blog.csdn.net/blake321/article/details/132948094