一、前言

在批处理中,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 详解相关推荐

  1. DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~)

    DOS循环:bat/批处理for命令详解之一 (史上虽详尽的总结和说明~~) --- --- 前言: 虽然以前对批处理也算有点研究,但一直对for命令理解不够透彻,偶尔用时也是照猫画虎的用一下. 虽然 ...

  2. windows批处理 (cmd/bat) 编程详解

    2019独角兽企业重金招聘Python工程师标准>>> windows批处理 (cmd/bat) 编程详解 开始之前先简单说明下cmd文件和bat文件的区别:在本质上两者没有区别,都 ...

  3. 批处理for命令详解(转) 批处理for命令详解

    批处理for命令详解(转) 批处理for命令详解 2008-03-07 11:00 FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能! 看看他的基本格式(这里我引用的是批处理中的格式,直 ...

  4. 终极dos批处理循环命令详解

    ---恢复内容开始--- 终极dos批处理循环命令详解 格式:FOR [参数] %%变量名 IN (相关文件或命令) DO 执行的命令作用:对一个或一组文件,字符串或命令结果中的每一个对象执行特定命令 ...

  5. 1. 批处理常用符号详解:

    1. 批处理常用符号详解: -------------------------------------------- 1.@ 一般在它之后紧跟一条命令或一条语句,则此命令或语句本身在执行的时候不会显示 ...

  6. Flink SQL 批处理使用HOP详解

    Flink SQL 批处理使用HOP详解 介绍 Flink SQL中分组窗口函数中有一个HOP(time_attr, hop interval 滑动间隔, fixed duration 窗口时间),适 ...

  7. java工程在windows环境用bat启动详解

    原 java工程在windows环境用bat启动详解 2016年08月24日 13:19:52 qq_31197461 阅读数:3038 <span class="tags-box a ...

  8. 批处理if 命令详解

    批处理(bat)if 命令详解 一.语法规则 1.if命令5钟用法 if "字符串1"=="字符串2" command 语句 #判断两个字符串是否相等 if 数 ...

  9. 批处理---findstr命令详解

    在文件中寻找字符串. FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file] [/C:string] ...

  10. windows bat (批处理)——IF详解

    摘要:本文介绍了windows bat中IF语句的语法,包括3中基本形势和扩展IF语句 1. IF & IF not if  和 if not 有都有3中形势: IF [NOT] ERRORL ...

最新文章

  1. RedHat企业版的安装(一)
  2. Flutter配置好后,在Android Studio中找不到设备,no devices
  3. 关于成为一名优秀的软件测试工程师
  4. 查看mysql的启动日志目录下_mysql诊断启动问题、查看日志文件详解
  5. LF 和 CRLF 区别
  6. 文件操作-小文件复制
  7. 画面风格写实的5z20
  8. 用jsonp 解决跨域问题
  9. uuid会重复吗_记一次订单号重复的事故,快看看你的 UUID 在并发下还正确吗?...
  10. 正则表达式非捕获分组?:
  11. layui下select大数据卡顿问题
  12. 基于multisim的fm调制解调_基于SDR的FM调制与解调器的实现
  13. 动态页面抓取超级指南_减少页面重量的完整指南
  14. react创建ts项目
  15. 洛谷 Floating point exception: 8 Floating-point exception. 报错
  16. 网站运营手册_分享几款运营必备软件合集,欢迎补充
  17. 【聚合支付】 如何区分界定聚合支付中的“一清”和“二清”?
  18. Uniapp微信小程序实现简易生成表单生成器
  19. usb接口问题折腾记
  20. R语言 RStudio快捷键

热门文章

  1. librdkafka自动源码编译
  2. Cuda与GPU显卡驱动版本一览
  3. 自学SpringBoot二之配置文件--yml格式配置
  4. 手把手教学华为手机利用ABD工具卸载/禁用(隐藏)/恢复系统自带软件!
  5. X5之position_estimator_inav_main.c
  6. Gauss消去法、列主元素消去法及LU分解法的MATLAB实现
  7. linux tar 命令安装,Linux tar 命令 command not found tar 命令详解 tar 命令未找到 tar 命令安装 - CommandNotFound ⚡️ 坑否...
  8. 海康摄像头ffmpeg推流到srs流媒体服务器
  9. 计算机毕业设计之java+ssm基于web的考研助手网站
  10. matlab画中国地图深浅,科学网—MATLAB绘制中国地图 - 栾威的博文