批处理 bat for 详解
一、前言
在批处理中,for是最为强大的命令语句,它的出现,使得解析文本内容、遍历文件路径、数值递增/递减等操作成为可能;配合if、call、 goto等流程控制语句,更是可以实现脚本复杂的自动化、智能化操作;合理使用for语句,还能使代码大为简化,免除各位编写大量重复语句之苦。
二、for语句的基本用法
1、举例:
正如色彩缤纷的七彩光芒是由红绿蓝三原色构成的一样,最复杂的for语句,也有其基本形态,它的模样是这样的:
在cmd窗口中:
FOR %variable IN (set) DO command [command-parameters]
在批处理文件中:
FOR %%variable IN (set) DO command [command-parameters]
具体例子:
For %i in (1 2 3) do @echo %i
之所以要区分cmd窗口和批处理文件两种环境,是因为在这两种环境下,命令语句表现出来的行为虽然基本一样,但是在细节上还是稍有不同。
最明显的一个差异就是:在cmd窗口中,for之后的形式变量I必须使用单百分号引用,即%i;而在批处理文件中,引用形式变量i必须使用双百分号,即%%i。
2、for语句的基本要素都有些什么:
1、for、in和do是for语句的关键字,它们三个缺一不可;
2、%%I是for语句中对形式变量的引用,就算它在do后的语句中没有参与语句的执行,也是必须出现的;
3、in之后,do之前的括号不能省略;
4、command1表示字符串或变量,command2表示字符串、变量或命令语句;
3、精髓:
1、for语句的形式变量I,可以换成26个字母中的任意一个,这些字母会区分大小写,也就是说,%%I和%%i会被认为不是同一个变量;形式变量I还可以换成其他的字符,但是,为了不与批处理中的%0~%9这10个形式变量发生冲突,请不要随意把%%I替换为%%0 ~%%9中的任意一个;
2、in和do之间的command1表示的字符串或变量可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,每个元素之间,用空格键、跳格键、逗号、分号或等号分隔;
3、for语句依次提取command1中的每一个元素,把它的值赋予形式变量I,带到do后的command2中参与命令的执行;并且每次只提取一个元 素,然后执行一次do后的命令语句,而无论这个元素是否被带到command2中参与了command2的运行;当执行完一次do后的语句之后,再提取 command1中的下一个元素,再执行一次command2,如此循环,直到command1中的所有元素都已经被提取完毕,该for语句才宣告执行结 束;
其中,第3点是最为关键的,它描述了for语句的执行过程,是for语句的精髓所在,大家一定要牢记这一条,才能深刻理解更为复杂的for流程。
见识一下for的真正威力,检测当前硬盘都有哪些分区:
@echo off
set str=c d e f g h i j k l m n o p q r s t u v w x y z
echo current local disk:
for %%i in (%str%) do if exist %%i: echo %%i:
pause
这段代码能检测硬盘都有哪些分区,包括U盘和移动硬盘的分区,但是,当光驱中有盘的时候,也会被列出来,这是本代码的一个缺憾,在以后的讲解中,我将向大家讲述如何消除这个瑕疵,敬请关注本系列的后续章节。
高级应用:
列出当前目录下所有的文本文件:
@echo off
for %%i in (*.txt) do echo %%i
pause
列出只用两个字符作为文件名的文本文件:
@echo off
for %%i in (??.txt) do echo "%%i"
pause
3、检测文件大小并运行:
检测当前目录指定文件 temp.txt 如果这个文件大于500KB执行A 小于500KB则执行B
@echo off
for %%i in ("%~dp0\temp.txt") do (
set indexdx=%%~zi
)
if %indexdx% gtr 512000 (
rem 执行A命令
echo biger 512
)else (
rem 执行B命令
echo less 512
)
pause
4、将循环变量赋值给一个变量
https://blog.csdn.net/nodeman/article/details/45691863
预处理机制:批处理读取命令时是按行读取的(另外例如 for 命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。在不启用变量延迟,也不对变量动态捕获其扩展变化时,变量在预处理阶段不作改变
setlocal enabledelayedexpansion ,就是启用变量延迟,我们可以形象的认为是启用了“对变量动态捕获扩展变化”。而 ! 括起来的变量,就是要动态捕获扩展的目标变量,如果不需要,可以继续使用 % 括变量。
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for /l %%i in (1 1 10) do (set var=%%iecho ----- !var! 启用延缓环境变量echo 00000 %var% 未启用延缓环境变量
)pause
通过不同的开关可以实现更多的功能。for语句有多个开关,不同开关将会实现不同的功能。
1)无开关
无开关的for语句能够对设定的范围内进行循环,是最基本的for循环语句。其命令格式为:
FOR %%variable IN (set) DO command
其中,%%variable是批处理程序里面的书写格式,在DOS中书写为%variable,即只有一个百分号(%);set就是需要我们设定的循环范围,类似于C语言里面的循环变量;do后面的command就是循环所执行的命令,即循环体。
无开关for语句举例:
@echo offfor %%i in (a,"b c",d) do echo %%i::pause >nul 将命令的输出重定向到 nul这个空设备,不会显示任何内容
::pause >nul 表示暂停,但不在屏幕上显示提示信息
pause>nul
结果:
2)开关/L (start,step,end) step=<end
含开关/L的for语句,可以根据set里面的设置进行循环,从而实现对循环次数的直接控制。其命令格式为:
FOR /L %%variable IN (start,step,end) DO command
其中,start为开始计数的初始值,step为每次递增的值,end为结束值。当end小于start时,step需要设置为负数。
含开关/L的for语句举例(创建5个文件夹):
@echo off
for /l %%i in (1,2,10) do md %%i
pause
结果:
未完待续。。。
参考文章:
https://www.cnblogs.com/DswCnblog/p/5435300.html
https://baike.baidu.com/item/%E6%89%B9%E5%A4%84%E7%90%86/1448600?fr=aladdin#5_2
https://www.w3cschool.cn/dosmlxxsc1/wvqyr9.html
批处理 bat for 详解相关推荐
- DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~)
DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~) --- --- 前言: 虽然以前对批处理也算有点研究,但一直对for命令理解不够透彻,偶尔用时也是照猫画虎的用一下. 虽然 ...
- windows批处理 (cmd/bat) 编程详解
2019独角兽企业重金招聘Python工程师标准>>> windows批处理 (cmd/bat) 编程详解 开始之前先简单说明下cmd文件和bat文件的区别:在本质上两者没有区别,都 ...
- 批处理for命令详解(转) 批处理for命令详解
批处理for命令详解(转) 批处理for命令详解 2008-03-07 11:00 FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能! 看看他的基本格式(这里我引用的是批处理中的格式,直 ...
- 终极dos批处理循环命令详解
---恢复内容开始--- 终极dos批处理循环命令详解 格式:FOR [参数] %%变量名 IN (相关文件或命令) DO 执行的命令作用:对一个或一组文件,字符串或命令结果中的每一个对象执行特定命令 ...
- 1. 批处理常用符号详解:
1. 批处理常用符号详解: -------------------------------------------- 1.@ 一般在它之后紧跟一条命令或一条语句,则此命令或语句本身在执行的时候不会显示 ...
- Flink SQL 批处理使用HOP详解
Flink SQL 批处理使用HOP详解 介绍 Flink SQL中分组窗口函数中有一个HOP(time_attr, hop interval 滑动间隔, fixed duration 窗口时间),适 ...
- java工程在windows环境用bat启动详解
原 java工程在windows环境用bat启动详解 2016年08月24日 13:19:52 qq_31197461 阅读数:3038 <span class="tags-box a ...
- 批处理if 命令详解
批处理(bat)if 命令详解 一.语法规则 1.if命令5钟用法 if "字符串1"=="字符串2" command 语句 #判断两个字符串是否相等 if 数 ...
- 批处理---findstr命令详解
在文件中寻找字符串. FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file] [/C:string] ...
- windows bat (批处理)——IF详解
摘要:本文介绍了windows bat中IF语句的语法,包括3中基本形势和扩展IF语句 1. IF & IF not if 和 if not 有都有3中形势: IF [NOT] ERRORL ...
最新文章
- RedHat企业版的安装(一)
- Flutter配置好后,在Android Studio中找不到设备,no devices
- 关于成为一名优秀的软件测试工程师
- 查看mysql的启动日志目录下_mysql诊断启动问题、查看日志文件详解
- LF 和 CRLF 区别
- 文件操作-小文件复制
- 画面风格写实的5z20
- 用jsonp 解决跨域问题
- uuid会重复吗_记一次订单号重复的事故,快看看你的 UUID 在并发下还正确吗?...
- 正则表达式非捕获分组?:
- layui下select大数据卡顿问题
- 基于multisim的fm调制解调_基于SDR的FM调制与解调器的实现
- 动态页面抓取超级指南_减少页面重量的完整指南
- react创建ts项目
- 洛谷 Floating point exception: 8 Floating-point exception. 报错
- 网站运营手册_分享几款运营必备软件合集,欢迎补充
- 【聚合支付】 如何区分界定聚合支付中的“一清”和“二清”?
- Uniapp微信小程序实现简易生成表单生成器
- usb接口问题折腾记
- R语言 RStudio快捷键
热门文章
- librdkafka自动源码编译
- Cuda与GPU显卡驱动版本一览
- 自学SpringBoot二之配置文件--yml格式配置
- 手把手教学华为手机利用ABD工具卸载/禁用(隐藏)/恢复系统自带软件!
- X5之position_estimator_inav_main.c
- Gauss消去法、列主元素消去法及LU分解法的MATLAB实现
- linux tar 命令安装,Linux tar 命令 command not found tar 命令详解 tar 命令未找到 tar 命令安装 - CommandNotFound ⚡️ 坑否...
- 海康摄像头ffmpeg推流到srs流媒体服务器
- 计算机毕业设计之java+ssm基于web的考研助手网站
- matlab画中国地图深浅,科学网—MATLAB绘制中国地图 - 栾威的博文