• bat使用方法汇总


    前言

    由于日常科研工作中使用C/C++比较多,在进行大规模运行时涉及到的批量处理操作较多,遂将目前遇到的情况记录如下,以便查看:

    1.for循环

     最基本的for循环操作为在一些数中遍历,如下例子。setlocal enabledelayedexpansion 为设置延时,检测for循环变量的动态变化,使用/L循环必备。(5,5,25)表示从5开始到25结束(左右两边都包含),步长为5。

    @echo off
    setlocal enabledelayedexpansion
    
    set /a v=0
    for /L %%a in (5,5,25) do (
       set /a v+=1
    
       echo %%a
       echo !v!
     
    )
    
    pause

    2.读取和写入txt文件

    2.1写入

    使用bat将数据写入txt文件中,>表示直接覆盖,>>表示追加。这里采用了中间变量temp

    @echo off
    setlocal enabledelayedexpansion
    
    for /L %%i in (5,5,25) do (
         echo %%i>%%i.txt
         set /a temp=%%i+5

    echo !temp!>>%%i.txt )

    2.2读取后写入

    还可以读取一个txt文件中的值并写入另一txt文件显示,另外还可以设置变量显示

    如已知25.txt:

     执行如下程序:

    @echo off
    setlocal enabledelayedexpansion
    
    set targe=''
    
    for /f   %%i in (C:UsersAdministratorDesktop	est25.txt)  do (
        set target=%%i
        echo !target! > test1.txt
        echo !target! >> test2.txt
    ) 
    
    pause

    结果如下:

    2.3读取txt文件中某一行 

    读取txt中的某一行中的值,并赋给另一个变量:

    @echo off
    setlocal enabledelayedexpansion
    
    set /a n=0
    for /f "delims=" %%i in (25.txt)  do (
        set /a n+=1
        if !n!==2 echo %%i
        if !n!==5 echo %%i
    ) 
    
    pause

    结果如下:

    3.bat之间传参

    3.1传参方法1

    将TEST1.bat中的值传到TEST2.bat中,并显示出来:

    TEST1.bat:

    @echo off
    set a=1
    set b=2
    set c=3
    
    call TEST2.bat %a%,%b%,%c%

    TEST2.bat:

    echo parameter a  is %1
    echo parameter b  is %2
    echo parameter c  is %3
    
    pause

    运行TEST1.bat的结果:

    3.2传参方法2 

    还有另一种方法传参,将参数值放在bat后面进行传递,将TEST1.bat中的值传到TEST2.bat中:

    TEST1.bat:

    @echo off
    
    TEST2 10 20 30

    TEST2.bat:

    echo parameter a  is %1
    echo parameter b  is %2
    echo parameter c  is %3
    
    pause

    执行TEST1.bat后的结果:

    4.bat移动txt文件

     将当前文件夹下的test.txt移动到任意文件夹下:

    move 25.txt C:UsersAdministratorDesktop	est25.txt

     5.bat中表示大于、小于等

    在bat中,有如下定义:

    EQU - 等于
    NEQ - 不等于
    LSS - 小于
    LEQ - 小于或等于
    GTR - 大于
    GEQ - 大于或等于

    直接上代码:

    @echo off
    
    set /a a=1,b=2
    if %a% equ %b% (echo yes) else (echo no)
    if %a% neq %b% (echo yes) else (echo no)
    if %a% lss %b% (echo yes) else (echo no)
    if %a% leq %b% (echo yes) else (echo no)
    if %a% gtr %b% (echo yes) else (echo no)
    if %a% geq %b% (echo yes) else (echo no)
    
    pause

    结果如下:

     6.bat中并行运行

    将参数从TEST1.bat同时传递到TEST2.bat,并且同步运行

    TEST1.bat:

    echo "Are you ready to continue...(Y/N)"
    set /p isReady=
    if "%isReady%" == "Y" (
        echo "Ready to continue."
    ) else (
        exit
    )
    
    start for %%i in (2, 7, 12, 17) do start TEST2 %%i  28

    TEST2.bat

    @echo off
    echo parameter a  is %1
    echo parameter b  is %2
    
    pause

    运行TEST1.bat后生成的结果有5个窗口文件:

    7.bat中加减乘除取余等操作

    bat中运算方法与C++中类似,代码为:

    set /a z=10*5  rem 乘法
    echo %z%
    
    set /a z=10/5  rem 除法
    echo %z%
    
    set /a z=10+5  rem 加法
    echo %z%
    
    set /a z=10-5  rem 减法
    echo %z%
    
    set /a z=10/3  rem 除法(余数不为0)
    echo %z%
    
    set /a z=10%%3  rem 取余
    echo %z%
    
    pause

    运行bat后生成的结果如下:

    参考链接

    1. for语句循环结构:https://www.cnblogs.com/yang-hao/p/6002869.html
    2. 读取txt并打印:https://blog.csdn.net/sdewendong/article/details/93736366?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
    3. 传递参数:https://jingyan.baidu.com/article/60ccbcebb8a4e464cbb19750.html
    4. 读取txt中某一行的内容:https://blog.csdn.net/LHshooter/article/details/107280030?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param
    5. 循环变量问题(开启延时使用!K!读取变量,不开启延时使用%K%读取变量):https://blog.csdn.net/hongweigg/article/details/107353164
  • 相关阅读:
    免费申请域名
    分享学习linux网站
    二分法
    node 解决存储xss风险报告
    cf987f AND Graph
    loj2587 「APIO2018」铁人两项
    luogu3830 [SHOI2012]随机树
    luogu3343 [ZJOI2015]地震后的幻想乡
    bzoj2560 串珠子
    luogu3317 [SDOI2014]重建
  • 原文地址:https://www.cnblogs.com/ipersevere/p/14193241.html
Copyright © 2020-2023  润新知