bat批处理 for循环_批处理 for /f

bat批处理 for循环_批处理 for /f一、前言在批处理中,for是最为强大的命令语句,它的出现,使得解析文本内容、遍历文件路径、数值递增/递减等操作成为可能;配合if、call、goto等流程控制语句,更是可以实现脚本复杂的自动化、智能化操作;合理使用for语句,还能使代码大为简化,免除各位编写大量重复语句之苦。二、for语句的基本用法1、举例:正如色彩缤纷的七彩光芒是由红绿蓝三原色构成的一样,最复杂的for语句,也…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、前言

在批处理中,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

bat批处理 for循环_批处理 for /f

之所以要区分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=%%i
   echo ----- !var! 启用延缓环境变量
   echo 00000 %var% 未启用延缓环境变量
)

pause 

 

bat批处理 for循环_批处理 for /f

通过不同的开关可以实现更多的功能。for语句有多个开关,不同开关将会实现不同的功能。

1)无开关

无开关的for语句能够对设定的范围内进行循环,是最基本的for循环语句。其命令格式为:

FOR %%variable IN (set) DO command

其中,%%variable是批处理程序里面的书写格式,在DOS中书写为%variable,即只有一个百分号(%);set就是需要我们设定的循环范围,类似于C语言里面的循环变量;do后面的command就是循环所执行的命令,即循环体。

无开关for语句举例:

@echo off

for %%i in (a,"b c",d) do echo %%i

::pause >nul 将命令的输出重定向到 nul这个空设备,不会显示任何内容
::pause >nul 表示暂停,但不在屏幕上显示提示信息
pause>nul 

结果:

bat批处理 for循环_批处理 for /f

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

结果:

bat批处理 for循环_批处理 for /f

 

未完待续。。。

参考文章:

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184041.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 手机最强 Python 编程神器,在手机上运行 Python 不再是梦[通俗易懂]

    手机最强 Python 编程神器,在手机上运行 Python 不再是梦[通俗易懂]手机编程软件有很多,大部分都很难使用,操作不灵活,甚至不能安装第三方库。尝试安装了很多Python移动编程软件,发现了很多问题,不是编码效率低就是各种bug。今天,来自一位python编程小哥指导,向大家推荐两款精心挑选的手机编程软件,它们也是非常成熟的手机编程工具。QPythonOHQpython是一个轻量级的、成熟的python编程工具。它配有终端和简单的代码编辑器。它支持安装第三方库。目前,它支持Python3.6.6,这还不算太老。代码编辑区域代码比其他手机编程软件更灵活,底

    2022年8月12日
    2
  • VirtualBox命令行接口VBoxManage配置「建议收藏」

    VirtualBox命令行接口VBoxManage配置「建议收藏」VBoxManage是VirtualBox的命令行接口,你可以在主机操作系统的命令行中完全地控制VirtualBox。VBoxManage支持GUI可访问的全部功能,而且更多。VBoxManage展示了虚拟化引擎的全部特征,包括GUI无法访问的。使用VBoxManage前需配置环境变量:1,在系统变量里面添加variable:VBoxManage        

    2022年5月27日
    32
  • SpringBoot整合Mybatis完整详细版

    SpringBoot整合Mybatis完整详细版记得刚接触SpringBoot时,大吃一惊,世界上居然还有这么省事的框架,立马感叹:SpringBoot是世界上最好的框架。哈哈!当初跟着教程练习搭建了一个框架,传送门:springboot+jpa+bootstrap+thymeleaf简单的增删改查Demo后来进了新公司,用不到而且忙于任务,今天重温一遍居然有些忘了,看来真是好记性不如烂笔头。于是写下本篇SpringBo…

    2022年6月13日
    30
  • Dubbo框架(Javassm框架)

    1.Dubbo是什么?Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别WebService模式中的WSdl,以服务者

    2022年4月11日
    69
  • 执行jar包中指定main方法

    执行jar包中指定main方法通过maven将应用打成jar包之后,可以通过java-jar ***.jar来执行,会运行指定的main方法,主要是 MANIFEST.MF中指定的main方法;那么如果有多个main方法的时候如何运行指定的main方法哪,可以通过下面命令去执行java-classpath****.jar****.****.className[args]这里的****.****指的是…

    2022年5月31日
    38
  • gridview DataFormatString[通俗易懂]

    转有个时间要在gridview中显示,但是保持着数据库中的是标准时间,很长,而且只需要显示日期,就想要格式化字符串,可是设置了DataFormatString就是不起作用,后来一查,原来要设置”行为”中HtmlEncode=falseDataFormatString=”{0:格式字符串}”在DataFormatString中的{0}表示数据本身,而在冒号后面的格式字符串代表所们希望…

    2022年4月7日
    78

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号