• bat常规脚本命令(用到才会写,未完待续10/27)


    一、rem和::

    • 区别
      1)rem:注释,支持echo回显;
      2):::注释,不支持echo回显,不能在()语句块中使用。
      3)扩展:冒号后紧跟一个非字母数字的一个特殊符号其实都等价于双冒号,目的是使goto无法识别;

    • 例子

    @echo on
    rem 这是注释内容,由于指定了echo on,命令行会打印这段注释
    :: 这也是注释内容,但是不支持回显
    @echo off
    
    • 1
    • 2
    • 3
    • 4

    二、call和start

    1)区别

    1)call:调用另一个批处理文件,如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令;
    2)start:批处理中调用外部程序的命令(该外部程序在新窗口中运行,批处理程序继续往下执行,不理会外部程序的运行状况),如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令

    2)cal使用示例

    1)调用脚本

    :: 调用另一个脚本,并在执行结束后返回本脚本
    :: filename 参数必须具有 .bat 或 .cmd 扩展名
    call autoexec.bat 参数1 参数2
    
    • 1
    • 2
    • 3

    2)调用命令行字符串

    :: 如果不用call,而直接运行%cmdstr%,将显示结果%aa%,而不是123456
    set aa=123456
    set cmdstr=echo %aa%
    call %cmdstr%
    pause
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3)调用带返回值的子程序
    这里重点关注getSum中shift的用法,默认右移1位,即shift等价于shift /1。
    以本demo为例:%1在没有右移时表示第一个入参,在shift /1之后,%1指向的是原%2的入参。

    @echo off
    rem 调用getString子程序
    call :getString return
    echo return = %return%
    pause
    
    
    @echo off
    set sum=0
    call :getSum 1 2 3 4 5
    echo sum = %sum%
    pause
    goto :eof
    
    
    rem 利用入参实现返回值
    :getString
    set %1=from sub script
    goto :eof
    
    rem 利用全局变量实现返回值
    :getSum
    set /a sum+=%1
    shift /1
    if not "%1"=="" goto getSum
    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
    • 25
    • 26

    3)start使用场景

    :: 调用文件管理器打开D盘
    start explorer d:\
    :: 打开命令行窗口
    start cmd
    
    • 1
    • 2
    • 3
    • 4

    三、pause

    暂停并运行显示:请按任意键继续. . .
    要显示其他提示语,可以这样用:Echo 其他提示语 & pause > nul

    四、for循环

    1)基本格式

    FOR %%variable IN (set) DO command [command-parameters]
    
    • 1

    2)参数解释

    1)%%variable 指定一个单一字母表示可替换的参数。
    2)(set) 指定一个或一组文件名,可以使用通配符。
    3)command 指定对每个文件执行的命令。
    4)command-parameters为特定命令指定参数或命令行开关。
    
    • 1
    • 2
    • 3
    • 4

    3)FOR循环的4个参数 /d /l /r /f

    • /d 搜索目录
      使用格式:FOR /D %%variable IN (set) DO command [command-parameters]
    • 作用:指定遍历范围为当前目录,且遍历对象仅为文件夹不包含文件类型
    • 适用性:如果 set 中包含通配符(* 和 ?),将对与 set 相匹配的每个目录(而不是指定目录中的文件组)执行指定的 Command。这个参数主要用于目录搜索,不会搜索文件。
    # 打印c盘根目录所有文件夹名称
    @echo off
    for /d %%i in (c:\*) do echo %%i
    pause
    
    # 打印c盘根目录名字只有1-3个字母的文件夹
    for /d %%i in (c:\???) echo %%i
    pause
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • /l 确定循环次数和步长
    使用格式:FOR /L %%variable IN (start,step,end) DO command [command-parameters]
    作用:明确循环次数和步长
    
    • 1
    • 2
    • 含义:表示以增量形式从开始到结束的一个数字序列。比如:(1,1,5) 将产生序列 1 2 3 4 5,(5,-1,1) 将产生序列 (5 4 3 2 1)。
    • /r 遍历对象含文件和文件夹
    使用格式:FOR /R [[drive:]path] %%variable IN (set) DO command [command-parameters]
    作用:指定递归遍历范围为/r后面的路径,遍历对象含文件和文件夹
    
    • 1
    • 2
    • 作用:检查以 [drive:]path 为根的目录树,指向每个目录中的FOR 语句。如果在 /R 后没有指定目录,则使用当前目录。如果集仅为一个单点(.)字符或则具体的文件名(不含通配符),则忽略set枚举该目录树。
    @echo off
    :: 递归遍历指定路径
    for /r e: %%i in (*.exe) do echo %%i
    :: 递归遍历当前路径
    for /r %%i in (*.exe) do echo %%i
    pause
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • /f 遍历读取文件、字符串、命令行中指定内容执行相应操作
    使用格式:
    FOR /F [“options”] %%variable IN (file-set) DO command [command-parameters]
    FOR /F [“options”] %%variable IN (“string”) DO command [command-parameters]
    FOR /F [“options”] %%variable IN (‘command’) DO command [command-parameters]
    
    • 1
    • 2
    • 3
    • 4

    选项参数解释:
    其中, [“options”]为一个或多个解析选项,选项之间用空格断开,这些解析选项包括:
    1)eol=c - 指一个行注释字符的结尾(就一个)(备注:默认以使用;号为行首字符的为注释行)
    2)skip=n - 指在文件开始时忽略的行数,(备注:最小为1,n可以大于文件的总行数,默认为1。)
    3)delims=xxx - 指分隔符集。这个替换了空格和跳格键的默认分隔符集。
    4)tokens=x,y,m-n - 指每行的哪一个符号被传递到每个迭代的 for 本身。m-n格式为一个范围

    @echo off
    rem 首先建立临时文件test.txt
    echo ;注释行,这是临时文件,用完删除 >test.txt
    echo 111213141516>>test.txt
    echo 21段,22段,23段,24段,25段,26段 >>test.txt
    echo 31段-32段-33段-34段-35段-36段 >>test.txt
    FOR /F "eol=; tokens=1,3* delims=,- " %%i in (test.txt) do echo %%i %%j %%k
    Pause
    Del test.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    运行显示结果:
    11段 13段 14段 15段 16段
    21段 23段 24段,25段,26段
    31段 33段 34段-35段-36段
    请按任意键继续. . .

    五、tasklist&taskkill进程管理

    tasklist|findstr pname
    # 指定进程名称   pname就类似test.exe这样的名字
    taskkill /f /im pname
    # 指定进程ID(可指定多个)
    taskkill /f /pid 2152 /pid 1284
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    自定义类加载器
    C++ 多态和虚函数详解
    时间复杂度和空间复杂度
    【SpringBoot】12.SpringBoot整合Dubbo+Zookeeper
    C#数据去重的5种方式,你知道几种?
    多模态实战视频生成文本:基于VGG与LSTM实现图像对应的描述文本生成任务
    openKylin 0.7 尝鲜
    【算法萌新闯力扣】:旋转字符串
    QT Widget: 自定义Widget组件及创建和使用动静态库
    产品经理简要介绍主流电商平台商品API接口的重要应用价值
  • 原文地址:https://blog.csdn.net/weixin_43679037/article/details/127547410