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:\Users\Administrator\Desktop\test\25.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:\Users\Administrator\Desktop\test\25.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后生成的结果如下:
参考链接
- for语句循环结构:https://www.cnblogs.com/yang-hao/p/6002869.html
- 读取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
- 传递参数:https://jingyan.baidu.com/article/60ccbcebb8a4e464cbb19750.html
- 读取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
- 循环变量问题(开启延时使用!K!读取变量,不开启延时使用%K%读取变量):https://blog.csdn.net/hongweigg/article/details/107353164