批处理文件for循环_批处理循环语句

批处理文件for循环_批处理循环语句命令格式:for{%variable|%%variable}in(集合)docommand[options]%variable|%%variable:代表可替换参数。使用%variable通过命令提示符执行for命令。使用%%variable在批处理文件中执行for命令;这个变量可以是26个英文字母任意一个,也可以是其他;这些变量会区分大小写,%%x和%%X代表

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

Jetbrains全系列IDE稳定放心使用

命令格式:for{%variable |%% variable } in (集合) do

command [options]

%variable |%% variable: 代表可替换参数。使用%variable通过命令提示符执行for命令。使用%% variable在批处理文件中执行for命令;

这个变量可以是26个英文字母任意一个,也可以是其他;这些变量会区分大小写,%%x 和%%X代表不同的变量;避免与bat的%0~%9发生冲突,最好不要定义成这个形参。

集合: 文件,目录,字符串或者范围数值的集合;可以是一个,也可以是多个,每一个字符串或变量,我们称之为一个元素,每个元素之间,用空格键、跳格键、逗号、分号或等号分隔

@echo off

for %%x in (nicky=rebecia=jady) do (

      echo %%x

)

pause

 

Command: 要执行的命令

Options: 参数选项

@echo off

for %%x in (*.txt) do (

      echo %%x content listed as follow:

      type %%x \n

)

pause

 

for /f 是以行为基本操作单位的,类似于Linux awk命令

 

二、切分字符串的利器:delims=x

rem 以:做为分隔符,且取得:之前的数据,后面的数据不见了。

for /f “delims=:” %%i in (1.txt) do

@echo off

for /f “delims=:” %%i in (1.txt) do (

      echo %%i

)

pause

如果不指定,默认是以空格或者tab作为分割的。

你也可以一次性指定多个分割符号,即所谓的符号列表,这样只要满足符号列表的数据,都会把符号前面的数据提取出来

语法:for /f”delims=,.: ” %%i in (1.txt) do 四个符号作为分割

 

三、定点提取:tokens= 数字 指定第几个token输出

Tokens后面一般跟数字,可以是多个数字,但是每一个数字之间用逗号分开,如tokens=3,5,7 含义是:提取第3,5,8节字符串

for /f “delims=: tokens=2” %%i in (1.txt)do

1.txt 内容如下:

A:B:C:D:E

AA:BB:CC:DD

AAA;BBB;CCC;DDD

AAAA,BBBB,CCCC,DDDD

 

@echo off

for /f “delims=,;: tokens=1” %%i in (1.txt) do (

      echo %%i

)

Pause

Results:

A

AA

AAA

AAAA

既然如此,那么我指定多个tokens, 怎么接收呢?

可以再指定一个变量,来接受第二个token,语法如下:

for /f “delims=,;: tokens=1,2” %%i in(1.txt) do

其中tokens=1,N 也可以表示为tokens=1-N,那么之间连续的数都会被使用:

 

@echo off

for /f “delims=,;: tokens=1,2” %%i in (1.txt) do (

      echo %%i %%j

)

Pause

结果:

A B

AA BB

AAA BBB

AAAA BBBB

 

四:跳过无关内容:skip=n 跳过无关的行,从N+1行开始处理

@echo off

for /f “skip=1 delims=,;: tokens=1,2” %%i in (1.txt) do (

      echo %%i %%j

)

Pause

结果:

AA BB

AAA BBB

AAAA BBBB

把第一行给去掉了

五、忽略指定字符开头的行 eol=

语法格式:for /f”eol=A,B delims=,;: tokens=1,2″ %%i in (1.txt) do

忽略以A和B开始的行

@echo off

for /f “eol=A,B delims=,;: tokens=1,2” %%i in (1.txt) do (

      echo %%i %%j

)

pause

 

六:集合中语法

6.1 如果集合是读取文件作为内容:

for –f %%x in (*.txt) do

6.2 如果集合是命令执行结果,圆括号内容需要用单引号括起来:

for –f %%x in (‘dir /a-d /b *test*.txt’) do

6.2 如果集合是字符串,应该用双引号括起来:

for –f %%x in (“AA.BB,CC,DD”) do

 

七:usebackq 增强性质的参数,那么for语句第一个括号内的写法有所改变,即集合的写法有所改变,怎么改变?

7.1 如果以前是用单引号括起来的命令结果作为参数,那么单引号改为后引号“;

for –f %%x in (·dir /a-d /b *test*.txt·) do

7.2 如果之前是字符串的话,那么双引号改为单引号

for –f %%x in (‘AA.BB,CC,DD’) do

7.3 如果是文件名的话,就需要用双引号括起来

for –f %%x in (“*.txt”) do

我们还必须要注意一件事情,就是路径问题:如果路径包含特殊符号我们需要用双引号把路径括起来

八:变量延迟和扩展

例子:

@echo off

set var=nicky && echo %var%

pause

显示结果echo is off

@echo off

set var=nicky

if %var%==nicky (

    set var=belly

    echo %var%

)

一般新手会认为var是belly,但其结果显示的是nicky

为什么呢?这就和变量延迟有关系了。

windows在解释执行此代码段时,在遇到if,for语句后的括号后,只把它当一条语句处理而不是两条语句,那么既然如此,那么在if语句内的var变量虽然被赋值了,但是这条语句相当于只是做了预处理,并没有真正影响到执行时的var值。即这条语句还没有被执行,那怎样才会得到想要结果呢,首先容易想到的是在if语句后面去输出var值。

方法一:

@echo off

set var=nicky

 

if %var%==nicky (

    set var=belly

)

echo %var%

pause

结果:belly

方法二:开启变量延迟

setlocal enabledelayedexpansion用于开启变量延迟

告诉解释器,在遇到复合语句的时候,不要将其作为一条语句同时处理,而仍然一条一条地去解释。但是这时必须用!var!来引用变量,如果仍然用%var%引用是无效的

@echo off

setlocal enabledelayedexpansion

set var=nicky

 

if %var%==nicky (

    set var=belly

      echo !var!

)

Pause

结果:belly

 

开启变量延迟之前的变量和之后的变量的值包含感叹号,是有一点区别的

@echo off

setlocal enabledelayedexpansion

set var=nicky

 

if %var%==nicky (

    set var=belly!

      echo !var!

)

Pause

结果还是belly,不是belly!,windows给去掉了

应对这种办法只有暂时关闭延迟了,或者在延迟之前set 变量的值

@echo off

set var=nicky

if %var%==nicky (

    set var=belly!

      setlocal enabledelayedexpansion

      echo !var!

)

pause

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

@echo off

for /L %%x in (2,2,10) do echo %%x

pause

result:

2

4

6

8

10

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

如果Set (也就是我上面写的”相关文件或命令”)包含通配符(*和?),将对与Set相匹配的每个目录(而不是指定目录中的文件组)执行指定的Command。

@echo off

::列举出包含ei的目录

for /D %%a in (*e* *i*) do echo %%a

pause

结果:

Cache

deploy

LogsAndDiagnostics

 

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

进入根目录树[Drive:]Path,在树的每个目录中执行for语句。如果在/R后没有指定目录,则认为是当前目录。如果Set只是一个句点(.),则只枚举目录树。

@echo off

 

rem 遍历当前目录下所有文件

for /r %%x in (*) do (echo %%x) 

pause

 

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

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

(0)
上一篇 2022年10月12日 下午6:00
下一篇 2022年10月12日 下午6:00


相关推荐

  • 如何解决数据库查询慢的问题_炖锅怎么那么慢熟

    如何解决数据库查询慢的问题_炖锅怎么那么慢熟一条慢查询会造成什么后果?年轻时,我一直觉得不就是返回数据会慢一些么,用户体验变差?其实远远不止,我经历过几次`线上事故`,有一次就是由一条SQL慢查询导致的。

    2022年10月14日
    4
  • 张予彤出任月之暗面总裁,负责公司整体战略与商业化

    张予彤出任月之暗面总裁,负责公司整体战略与商业化

    2026年3月12日
    3
  • 红黑树和平衡二叉树区别[通俗易懂]

    红黑树和平衡二叉树区别[通俗易懂]红黑树和平衡二叉树区别如下:1、红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单。2、平衡二叉树追求绝对平衡,条件比较苛刻,实现起来比较麻烦,每次插入新节点之后需要旋转的次数不能预知。…

    2022年10月20日
    4
  • 开发工具-Java SDK下载地址「建议收藏」

    开发工具-Java SDK下载地址「建议收藏」更新记录2022年6月14日加入更多的下载地址。2022年6月10日完善标题。下载地址:https://www.oracle.com/java/technologies/downloads/https://docs.microsoft.com/en-us/java/openjdk/downloadhttps://jdk.java.net/archive/…

    2022年10月20日
    4
  • sessionStorage 使用方法

    sessionStorage 使用方法作为 html5 中 WebStorage 的一种存储方式 localStorage 和 sessionStora 一样都是用来存储客户端临时信息的对象 这两者区别在于前者用于持久化的本地存储 除非主动删除数据 否则数据是永远不会过期的 而 sessionStora 存储的数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁 因此 sessionStora 不是一种持久化的本地存储

    2025年9月6日
    7
  • SGD(随机梯度下降)详解

    SGD(随机梯度下降)详解BGDvsSGDBGDv 名词解释功能快捷键合理的创建标题 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中 居左 居右 SmartyPants 创建一个自定义列表如何创建一个注脚注释也是必不可少的 KaTeX 数学公式新的甘特图功能 丰富你的文章 UML 图表 FLowchart 流程图导出与导入导出导入 BGDvsSGD

    2026年3月16日
    1

发表回复

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

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