批处理for命令的用法_批处理主要解决

批处理for命令的用法_批处理主要解决1.前言for是批处理中最复杂,也最强大的关键字。熟练掌握for的用法,才可能理解批处理的强大之处。2.基本用法2.1.概念for是对一组文件中的每一个文件执行某个特定命令。FOR%variableIN(set)DOcommand[command-parameters]%variable,指定一个单一字母可替换的参数。(set),指定一个或一组文…

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

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1. 前言

for是批处理中最复杂,也最强大的关键字。熟练掌握for的用法,才可能理解批处理的强大之处。

2. 基本用法

2.1. 概念

for是对一组文件中的每一个文件执行某个特定命令。

FOR %variable IN (set) DO command [command-parameters]

  • %variable, 指定一个单一字母可替换的参数。
  • (set) ,指定一个或一组文件,也可以一段文本内容。可以使用通配符。默认以空格,;三种符号分隔开。
  • command , 指定对每个文件执行的命令。
  • command-parameters ,为特定命令指定参数或命令行开关。
    在批处理程序中使用 for命令时,指定变量请使用 %%variable而不要用 %variable。变量名称是区分大小写的,所以 %i 不同于 %I.

2.2. 示例

	rem 遍历c盘的所有文件(不包括文件夹),然后输出到控制台
	for %%i in (c:\*.*) do @echo %%i
	rem 以空格为分隔符,将a、b、c逐行输出到控制台
	for %%i in (a b c) do @echo %%i
	rem 字符串加""则认为不分割,%~i不显示双引号
	for %%i in ("a b c") do @echo %%~i
	rem 遍历所有磁盘,判断存在的并输出至控制台
	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 当前硬盘的分区有:
	for %%i in (%str%) do if exist %%i: echo %%i:
	rem 使用通配符输出当前目录下所有后缀为.txt的文件名
	for %%i in (*.txt) do echo %%i
	rem 使用通配符输出当前目录下所有后缀为.txt文件名只有2个字符的文件名
	for %%i in (??.txt) do echo %%i

3. 扩展用法

3.1 for /d用法

FOR /D %variable IN (set) DO command [command-parameters]

  • /d指示set中的元素为目录。如果set中包含通配符,则指定与目录名匹配,而不与文件名匹配。
  • 示例
	rem 循环输出当前目录下所有的目录名
	for /d %%i in (*) do echo %%i
	rem 循环输出当前目录下,目录名最后字符为a的所有目录名
	for /d %%i in (*a) do echo %%i

3.2 for /r用法

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

  • 检查以 [drive:]path 为根的目录树,指向每个目录中的 FOR 语句。如果在 /R 后没有指定目录规范,则使用当前目录。如果集仅为一个单点(.)字符,则枚举该目录树。
  • 示例
	rem 遍历当前目录下所有目录,"/\."三者效果相同
	for /r %%i in (.) do @echo %%i
	for /r %%i in (\) do @echo %%i
	for /r %%i in (/) do @echo %%i
	rem 遍历指定目录
	for /r e:\ %%i in (.) do @echo %%i
	rem 遍历当前目录下所有文件并显示完全路径(包括子目录)
	for /r e:\ %%i in (*) do @echo %%i
	for /r e:\ %%i in (*.txt) do @echo %%i

3.3. for /l用法

FOR /L %variable IN (start,step,end) DO command [command-parameters]

  • 该集表示以增量形式从开始到结束的一个数字序列。因此,(1,1,5)将产生序列1 2 3 4 5,(5,-1,1)将产生序列(5 4 3 2 1)。
  • 示例
	rem 从1开始,以2为步进值,循环到不超过10(包括等于)
	for /l %%i in (1, 2, 10) do @echo %%i
	rem 从10开始,以-2为步进值,循环到不小于0(包括等于)
	for /l %%i in (10, -2, 0) do @echo %%i

3.4. for /f用法

3.4.1. 语法介绍

FOR /F [“options”] %variable IN (file-set) DO command [command-parameters]
FOR /F [“options”] %variable IN (“string”) DO command [command-parameters]
FOR /F [“options”] %variable IN (‘command’) DO command [command-parameters]

3.4.2. 参数介绍

  • file-set, fileset 为一个或多个文件名。继续到 fileset 中的下一个文件之前,每份文件都被打开、读取并经过处理。处理包括读取文件,将其分成一行行的文字,然后将每行解析成零或更多的符号。然后用已找到的符号字符串变量值调用 For 循环。 以默认方式,/F 通过每个文件的每一行中分开的第一个空白符号。跳过空白行。
  • options,可通过指定可选 “options” 参数替代默认解析操作。这个带引号的字符串包括一个
    或多个指定不同解析选项的关键字。这些关键字为:
    • eol=c – 指一个行忽略的开始字符(就一个)
    • skip=n – 指在文件开始时忽略的行数。
    • delims=xxx – 指分隔符集。这个替换了空格和跳格键的默认分隔符集。
    • tokens=x,y,m-n – 指每行的哪一个符号被传递到每个迭代 的 for 本身。这会导致额外变量名称的分配。m-n格式为一个范围。通过 nth 符号指定 mth。如果符号字符串中的最后一个字符星号,那么额外的变量将在最后一个符号解析之后分配并接受行的保留文本。
    • usebackq – 指定新语法已在下类情况中使用:在作为命令执行一个后引号的字符串并且一个单引号字符为文字字符串命令并允许在 file-set中使用双引号扩起文件名称。

3.4.3 示例

	rem 读取当前目录的a.txt,并显示每一行的内容(每一行内容遇到空格即终止)
	for /f %i in (a.bat) do @echo %i
	rem 读取多个文件,并显示每一行的内容(每一行内容遇到空格即终止)
	for /f %i in (a.bat b.txt) do @echo %i
	rem 忽略以"s”开头的行 for /f "eol=s“ %i in (a.bat) do @echo %i
	rem 跳过前5行
	for /f "skip=5" %i in (a.bat) do @echo %i
	rem 集中的分隔符默认为空格和tab键
	rem 通过delims=显式指定分隔符
	for /f "delims=," %i in (a.bat) do @echo %i
	rem 通过delims=显式指定分隔符,可以指定多个
	for /f "delims=,;" %i in (a.bat) do @echo %i
	rem 提取分隔字符串指定部分
	for /f "delims=, tokens=1" %%i in (test.txt) do echo %%i 
	rem 可以提取多个,从最前面指定的%%i顺序往后取
	for /f "delims=, tokens=1,2,3,4,5" %%i in (test.txt) do echo %%i %%j %%k %%l %%m
	rem 上面的代码可以简化如下
	for /f "delims=, tokens=1-5" %%i in (test.txt) do echo %%i %%j %%k %%l %%m
	for /f "delims=, tokens=1-3,4,5" %%i in (test.txt) do echo %%i %%j %%k %%l %%m
	rem *表示4之后的全部不分隔
	for /f "delims=, tokens=1,2,3,4,*" %%i in (test.txt) do echo %%i %%j %%k %%l %%m
	rem 集中的路径被当作字符串处理
	for /f %%a in (“C:\Documents and Settings\Administrator\桌面\note.txt”) do echo %%a
	rem usebackq指示集中的是文件路径
	for /f "usebackq" %%a in (“C:\Documents and Settings\\note.txt”) do echo %%a
	rem usebackq后面集中的单引号指定是字符串
	for /f "usebackq" %%a in ('C:\Documents and Settings\\note.txt') do echo %%a
	rem 集中的命令以``尖引号 for /f "usebackq" %i in (`dir /s /b`) do @echo %i
	rem 效果和上面相同,集中命令以单引号‘’
	for /f  %i in ('dir /s /b') do @echo %i
	rem 组合提取指定文件中的内容
	for /f "eol=; tokens=1,2* delims=,- " %%i in (d:\test.txt) do echo %%i %%j %%k

4. 变量延迟

for语句只影响后面的一句代码,如果想写多句代码,必须用()。批处理解释代码时,是先读出当前行的代码并解析,for及之后的代码也是一次加载并解释的。这就导致for之后的代码中的变量设置了并没有立即生效。如果想要立即生效,需要启用变量延迟。

  • setlocal enabledelayedexpansion
    启用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
  • setlocal disabledelayedexpansion
    禁用延迟的环境变量扩展,直到出现匹配的 endlocal 命令,无论 setlocal 命令之前的设置如何。
  • 示例,求0到100之和。
	@echo off
	setlocal enabledelayedexpansion
	for /l %%i in (0, 1, 100) do (
	set /a val+=%%i
	@echo !val!
	)
	endlocal
	pause
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2022年8月31日 下午12:46
下一篇 2022年8月31日 下午12:46


相关推荐

  • mysql配置1045错误_MySql 1045错误「建议收藏」

    mysql配置1045错误_MySql 1045错误「建议收藏」配置时以管理员身份运行MySQLInstanceConfigurationWizard当你登录MySQL数据库出现:Error1045错误时(如下图),就表明你输入的用户名或密码错误被拒绝访问了,最简单的解决方法就是将MySQL数据库卸载然后重装,但这样的缺点就是就以前的数据库中的信息将丢失,如果你不想重装,那么就需要找回密码或者重置密码。解决的方法应该有多种,这里我推荐大家使用一种原理通…

    2022年4月30日
    45
  • 旅行者 问题_航空公司在浪费金钱,这就是旅行者的意义所在「建议收藏」

    旅行者 问题_航空公司在浪费金钱,这就是旅行者的意义所在「建议收藏」旅行者问题(WanttoreceiveBuy/Sell/Holdinyourinbox?Signuphere.)(是否希望在收件箱中收到购买/出售/持有?在这里注册。)WelcometoBuy/Sell/Hold,Marker’sweeklynewsletterthat’s100%businessintelligenceand0%invest…

    2022年7月13日
    17
  • Arduino uno使用PCA9685模块实现16路舵机控制

    Arduino uno使用PCA9685模块实现16路舵机控制PCA9685 模块 PCA9685 是 16 路 12 位 PWM 信号发生器 可用于控制舵机 led 电机等设备 采用 I2C 通信 主机只需要 I2C 接口即可实现 16 路舵机控制 PCA9685 的 I2C 地址默认 0x40 如果需要改变地址 则需要将板上 A0 A5 焊通即可对应的 bit 置 1 此时地址为 0x40 A5 A0 这也意味着主机可以通过 I2C 地址控制 64 个 PCA9685 模块 从而实现最大 16 64 路舵机控制

    2026年3月18日
    2
  • Linux 修改文件名

    Linux 修改文件名使用 mvab 就可以重命名了 mv move 移动文件 延伸功能 重命名 linux 系统没有专门的重命名命名 基本格式 移动文件 mv 文件名移动目的地文件名重命名文件 mv 文件名修改后的文件名 mv move 移动文件 延伸功能 重命名 linux 系统没有专门的重命名命名 基本格式 mvfilenamene

    2026年3月16日
    2
  • 显卡矿机装linux教程,8张GTX1080Ti显卡加副电源矿机组装教程

    显卡矿机装linux教程,8张GTX1080Ti显卡加副电源矿机组装教程在经历一波短暂的回调后,最近比特币又持续升温,一度突破19000元大关,目前价格基本在18000-19000之间浮动,挖矿市场可谓是一片火爆!近日大风哥闲来无事,自己也倒腾了一台矿机来玩玩,特来大家分享一下安装教程及心得。说到挖矿,显卡当然是首当其冲了,而现阶段市售各型号的显卡也因虚拟币市场火热而处于货源紧缺的状态,可谓是一卡难求!赶巧笔者手上有几片GTX1080Ti,矿机的显卡就选用它们了!Em…

    2026年4月19日
    5
  • 【181212】VC++超市进销存管理系统(Access)源代码

    【181212】VC++超市进销存管理系统(Access)源代码源码下载简介一个相当不错的VC++毕业设计作品,一个超市进销存管理系统,不但界面专业,而且功能也丝毫不落后,编译后运行如上图示。这个进销存系统使用Access作为数据库,系统可完成基础资料维护、销售管理、库存管理、帐务管理、数据管理、辅助工具等,并以系统流程图的方式显示示意图,更直观、更有利于对软件的操作。源码下载地址:点击下载备用下载地址:点击下载…

    2022年5月29日
    42

发表回复

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

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