• bat 批示处理详解-2


    一: 基本运算

    1> bat中表示大于、小于等

    参数功能
    EQU等于
    NEQ不等于
    LSS小于
    LEQ小于或等于
    GTR大于
    GEQ大于或等于
    demo
    @echo off
    set a=%1%
    set b=%2%
    if %a% equ %b% (echo yes) else (echo no)
    
    pause
    #对传参的比较
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2> bat中加减乘除取余

    set /a z=10*5 乘法
    echo %z%
     
    set /a z=10/5 除法
    echo %z%
     
    set /a z=10+5 加法
    echo %z%
     
    set /a z=10-5 减法
    echo %z%
     
    set /a z=10/3 除法(余数不为0)
    echo %z%
     
    set /a z=10%%3 取余
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    二: 其他常用命令简介

    1> title- 标题

    设置命令提示窗口的窗口标题。
    
    TITLE [string]
    
      string       指定命令提示窗口的标题。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2> mode-配置系统设备

    配置系统设备。
    
    串行端口:          MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s]
                                    [to=on|off] [xon=on|off] [odsr=on|off]
                                    [octs=on|off] [dtr=on|off|hs]
                                    [rts=on|off|hs|tg] [idsr=on|off]
    
    设备状态:          MODE [device] [/STATUS]
    
    打印重定向:        MODE LPTn[:]=COMm[:]
    
    选择代码页:        MODE CON[:] CP SELECT=yyy
    
    代码页状态:        MODE CON[:] CP [/STATUS]
    
    显示模式:          MODE CON[:] [COLS=c] [LINES=n]
    
    击键率:            MODE CON[:] [RATE=r DELAY=d]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    3> find-在文件中搜索字符串

    FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "string" [[drive:][path]filename[ ...]]
    
      /V         显示所有未包含指定字符串的行。
      /C         仅显示包含字符串的行数。
      /N         显示行号。
      /I         搜索字符串时忽略大小写。
      /OFF[LINE] 不要跳过具有脱机属性集的文件。
      "string" 指定要搜索的文本字符串。
      [drive:][path]filename
                 指定要搜索的文件。
    
    如果没有指定路径,FIND 将搜索在提示符处键入
    的文本或者由另一命令产生的文本
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    demo

    
    find  /N "D:\360Downloads" .\new.txt
    pause
    
    • 1
    • 2
    • 3

    4> findstr-在文件中搜索字符串

    在文件中寻找字符串。
    
    FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
            [/C:string] [/G:file] [/D:dir list] [/A:color attributes] [/OFF[LINE]]
            strings [[drive:][path]filename[ ...]]
    
      /B         在一行的开始配对模式。
      /E         在一行的结尾配对模式。
      /L         按字使用搜索字符串。
      /R         将搜索字符串作为一般表达式使用。
      /S         在当前目录和所有子目录中搜索匹配文件。
      /I         指定搜索不分大小写。
      /X         打印完全匹配的行。
      /V         只打印不包含匹配的行。
      /N         在匹配的每行前打印行数。
      /M         如果文件含有匹配项,只打印其文件名。
      /O         在每个匹配行前打印字符偏移量。
      /P         忽略有不可打印字符的文件。
      /OFF[LINE] 不跳过带有脱机属性集的文件。
      /A:attr    指定有十六进位数字的颜色属性。请见 "color /?"
      /F:file    从指定文件读文件列表 (/ 代表控制台)。
      /C:string  使用指定字符串作为文字搜索字符串。
      /G:file    从指定的文件获得搜索字符串。 (/ 代表控制台)。
      /D:dir     查找以分号为分隔符的目录列表
      strings    要查找的文字。
      [drive:][path]filename
                 指定要查找的文件。
    
    除非参数有 /C 前缀,请使用空格隔开搜索字符串。
    例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中寻找 "hello" 或
    "there"。'FINDSTR /C:"hello there" x.y' 文件 x.y  寻找
    "hello there"。
    
    一般表达式的快速参考:
      .        通配符: 任何字符
      *        重复: 以前字符或类出现零或零以上次数
      ^        行位置: 行的开始
      $        行位置: 行的终点
      [class]  字符类: 任何在字符集中的字符
      [^class] 补字符类: 任何不在字符集中的字符
      [x-y]    范围: 在指定范围内的任何字符
      \x       Escape: 元字符 x 的文字用法
      \    字位置: 字的结束
    
    有关 FINDSTR 常见表达法的详细情况,请见联机命令参考
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    demo

    
    find   /V "*" .\new.txt |findstr /V D:\360Downloads 
    pause
    
    • 1
    • 2
    • 3

    5> pushd-保存当前目录以供 POPD 命令使用,然后改到指定的目录。

    保存当前目录以供 POPD 命令使用,然后改到指定的目录。
    
    PUSHD [path | ..]
    
      path        指定要成为当前目录的目录。
    
    如果命令扩展被启用,除了一般驱动器号和路径,PUSHD
    命令还接受网络路径。如果指定了网络路径,PUSHD 将创建一个
    指向指定网络资源的临时驱动器号,然后再用刚定义的驱动器
    号更改当前的驱动器和目录。可以从 Z: 往下分配临时驱动器
    号,使用找到的第一个没有用过的驱动器号
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    demo

    
    
    @echo off
    
    echo  %cd%
    PUSHD D:
    echo  %cd%
    pause
    ===============
     C:\Users\CHH_PC\Desktop\test
     D:\
    请按任意键继续. . .
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    6> popd- 更改到 PUSHD 命令存储的目录

    更改到 PUSHD 命令存储的目录。
    
    POPD
    
    
    如果命令扩展被启用,从推目录堆栈 POPD 驱动器时,POPD
    命令会删除 PUSHD 创建的临时驱动器号
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    @echo off
    
    echo  %cd%
    PUSHD D:
    echo  %cd%
    
    POPD
    echo  %cd%
    pause
    ========================
     C:\Users\CHH_PC\Desktop\test
     D:\
     C:\Users\CHH_PC\Desktop\test
    请按任意键继续. . .
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    7> 时间延迟

    ping命令延时

    @echo off
    echo befor:%time%
    ping /n 3 127.0.0.1 >nul
    echo after:%time%
    pause
    
    ======
    befor:22:02:22.12
    after:22:02:24.25
    请按任意键继续. . . # 从时间上看这里不是完全是3秒,一般都会提前
    用到了ping命令的“/n”参数,表示要发送多少次请求到指定的ip。本例中要发送3次请求到本机的ip(127.0.0.1)。127.0.0.1可简写为127.1。“>nul”就是屏蔽掉ping命令所显示的内容。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    for命令延时

    @echo off
    echo befor:%time%
    for /l %%i in (1,1,50000) do echo %%i>nul
    echo after:%time%
    pause
    ===================
    befor:22:07:08.93
    after:22:07:13.68
    请按任意键继续. . . # 时间不精确
    原理很简单,就是利用一个计次循环并屏蔽它所显示的内容来达到延时的目的
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    vbs延迟函数

    
    @echo off
    echo %time%
    call :delay 5000
    echo %time%
    pause
    exit
    :delay
    echo WScript.Sleep %1>delay.vbs
    CScript //B delay.vbs
    del delay.vbs
    goto :eof
    =============
    22:09:53.35
    22:09:58.64
    请按任意键继续. . .
    多出来的大约500毫秒时建立和删除临时文件所耗费的时间。误差在一秒之内
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    批处理命令

    仅用批处理命令实现任意时间延迟,精确度10毫秒,误差50毫秒内
    仅用批处理命令就可以实现延迟操作

    @echo off
    set /p delay=请输入需延迟的毫秒数:
    set TotalTime=0
    set NowTime=%time%
    ::读取起始时间,时间格式为:13:01:05.95
    echo 程序开始时间:%NowTime%
    :delay_continue
    set /a minute1=1%NowTime:~3,2%-100
    ::读取起始时间的分钟数
    set /a second1=1%NowTime:~-5,2%%NowTime:~-2%0-100000
    ::将起始时间的秒数转为毫秒
    set NowTime=%time%
    set /a minute2=1%NowTime:~3,2%-100
    :: 读取现在时间的分钟数
    set /a second2=1%NowTime:~-5,2%%NowTime:~-2%0-100000
    ::将现在时间的秒数转为毫秒
    set /a TotalTime+=(%minute2%-%minute1%+60)%%60*60000+%second2%-%second1%
    if %TotalTime% lss %delay% goto delay_continue
    echo 程序结束时间:%time%
    echo 设定延迟时间:%delay%毫秒
    echo 实际延迟时间:%TotalTime%毫秒
    pause
    =====================
    请输入需延迟的毫秒数:5000
    程序开始时间:22:14:44.56
    程序结束时间:22:14:49.56
    设定延迟时间:5000毫秒
    实际延迟时间:5000毫秒
    请按任意键继续. . 
    首先设定要延迟的毫秒数,然后用循环累加时间,直到累加时间大于等于延迟时间。
    误差:windows系统时间只能精确到10毫秒,所以理论上有可能存在10毫秒误差。.
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    子程序调用形式

    @echo off
    echo 程序开始时间:%Time%
    call :delay 10
    echo 实际延迟时间:%totaltime%毫秒
    echo 程序结束时间:%time%
    pause
    exit
    ::-----------以下为延时子程序--------------------
    :delay
    @echo off
    if \"%1\"==\"\" goto :eof
    set DelayTime=%1
    set TotalTime=0
    set NowTime=%time%
    ::读取起始时间,时间格式为:13:01:05.95
    :delay_continue
    set /a minute1=1%NowTime:~3,2%-100
    set /a second1=1%NowTime:~-5,2%%NowTime:~-2%0-100000
    set NowTime=%time%
    set /a minute2=1%NowTime:~3,2%-100
    set /a second2=1%NowTime:~-5,2%%NowTime:~-2%0-100000
    set /a TotalTime+=(%minute2%-%minute1%+60)%%60*60000+%second2%-%second1%
    if %TotalTime% lss %DelayTime% goto delay_continue
    goto :eof
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    timeout 延迟

    @echo off
    echo 程序开始时间:%Time%
    timeout /t 4
    echo 程序结束时间:%Time%
    pause
    
    ================
    
    程序开始时间:22:20:07.53
    
    等待 0 秒,按一个键继续 ...
    程序结束时间:22:20:11.13
    请按任意键继续. . .
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    timeout /t 5 /nobreak # 输出信息版本
    timeout /t 5 /nobreak > nul # 无信息输出版本
    
    • 1
    • 2
    TIMEOUT [/T] timeout [/NOBREAK]
    
    描述:
        这个工具接受超时参数,等候一段指定的时间(秒)或等按任意键。它还接受
        一个参数,忽视按键。
    
    参数列表:
        /T        timeout       指定等候的秒数。有效范围从 -1 到 99999 秒。
    
        /NOBREAK                忽略按键并等待指定的时间。
    
        /?                      显示此帮助消息。
    
    注意: 超时值 -1 表示无限期地等待按键。
    
    示例:
        TIMEOUT /?
        TIMEOUT /T 10
        TIMEOUT /T 300 /NOBREAK
        TIMEOUT /T -1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    延时对比

    类型含义
    ping用到了ping命令的“/n”参数,表示要发送多少次请求到指定的ip;
    for利用一个计次循环并屏蔽它所显示的内容来达到延时的目的
    vbs函数大约500毫秒时建立和删除临时文件所耗费的时间。误差在一秒之内
    批处理命令首先设定要延迟的毫秒数,然后用循环累加时间,直到累加时间大于等于延迟时间
    timeout工具接受超时参数,等候一段指定的时间(秒)或等按任意键。它还接受一个参数,忽视按键

    8> FOR命令中的变量

    1. ~I- 删除任何引号("),扩展 %I

    2. %~fI- 将 %I 扩展到一个完全合格的路径名

    3. %~dI- 仅将 %I 扩展到一个驱动器号

    4. %~pI- 仅将 %I 扩展到一个路径

    5. %~nI- 仅将 %I 扩展到一个文件名

    6. %~xI- 仅将 %I 扩展到一个文件扩展名

    7. %~sI- 扩展的路径只含有短名

    8. %~aI- 将 %I 扩展到文件的文件属性

    9. %~tI- 将 %I 扩展到文件的日期/时间

    10. %~zI- 将 %I 扩展到文件的大小

    11. %~$PATH:I

    二: bat 项目demo

    1> 模拟进度条

    @echo off
    
    color 9f
    echo 程序正在初始化. . .
    echo.
    echo ┌──────────────────────────────────────┐
    set /p=■ nul
    for /L %%i in (1,1,20) do set /p a=■ nul
    echo 100%%
    echo └──────────────────────────────────────┘
    color 07
    pause
    ===================
    程序正在初始化. . .
    
    ┌──────────────────────────────────────┐
    ■■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ 100%
    └──────────────────────────────────────┘
    请按任意键继续. . .
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    2> 交互界面设计demo

    请添加图片描述

    
    @echo off
    title 功能界面
    :menu_main
    echo.
    echo ==============================
    echo 请选择要进行的操作,然后按回车
    echo ==============================
    echo.
    echo 1.查询输入路径下文件信息
    echo.
    echo 2.清屏
    echo.
    echo 3.设置界面颜色
    echo.
    echo Q.退出
    echo.
    echo.
    :cho
    set choice=
    set /p choice=请选择:
    IF NOT \"%choice%\"==\"\" SET choice=%choice:~0,1%
    if /i \"%choice%\"==\"1\" goto get_path
    if /i \"%choice%\"==\"2\" goto clear_screen
    if /i \"%choice%\"==\"3\" goto clear_menu
    if /i \"%choice%\"==\"Q\" goto endd
    echo 选择无效,请重新输入
    echo.
    goto cho
    
    :get_path
    set Current_path=%cd%
    set /p target_path=请输入查询路径:
    %target_path%
    echo change %Current_path% to %target_path%
    echo 
    for /r %cd% %%a in (*) do echo %%a 
    echo  all info about %cd%
    goto menu_main 
    
    :clear_screen
    cls
    goto menu_main 	
    
    :clear_menu
    echo.
    echo ==============================
    echo 请选择设置颜色序号,然后按回车
    echo ==============================
    echo.
    echo 1.界面黑    ,蓝色字体
    echo.
    echo 2.界面黑    ,白色字体
    echo.
    echo 3.界面淡紫色,蓝色字体
    echo.
    echo 4.重新设置
    echo.
    echo 5.回到主菜单
    echo.
    echo Q.不设置,退出
    goto change_color
    
    :change_color
    set /p set_color=请输入设置颜色:
    if %set_color%==1 (color 01) else if %set_color%==2 (color 07)  else if %set_color%==3 (color D1)^
    else if %set_color%==4 (goto clear_menu)  else if %set_color%==Q (goto  endd)
    if %set_color%==5 (goto  menu_main)
    goto menu_main
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
  • 相关阅读:
    vue 实现语音播报
    vue项目打包后使用reverse-sourcemap反编译到源码(详解版)
    C#中的ConcurrentExclusiveSchedulerPair类
    Django学习日志06
    allegro中shape的一些基本操作(一)——添加和修改shape
    python基于PHP+MySQL的综合排课系统
    LambdaQueryWrapper模拟实现
    【算法-动态规划】贝尔曼福特算法
    惊爆GitHub!腾讯T14级SQL首席专家开源分布式数据库架构实践手册
    【短道速滑十一】标准的Gabor滤波器及Log_Gabor滤波器的实现、解析、速度优化及其和Halcon中gen_gabor的比较。
  • 原文地址:https://blog.csdn.net/weixin_42914706/article/details/125961200