命令格式: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

::列举出包含e和i的目录

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

windows 批处理 for循环语句相关推荐

  1. Windows批处理——批量新建文件夹

    在整理文档时,需要新建68个文件夹,而且名称是以数字有规律递增的. 如果手工新建文件夹,然后改名-- 利用Windows批处理实现循环新建文件夹,双击bat文件立即搞定! 有两点需要解决: 新建文件夹 ...

  2. Windows批处理

    因为需要所以学习了点Windows批处理,可以写一些bat脚本来实现自动化操作. 批量文件重命名 对win10用户来说,锁屏的windows聚焦图片有一些是非常好看的,可以copy下来当壁纸. 图片路 ...

  3. Windows批处理(cmd/bat)常用命令

    Windows批处理(cmd/bat)常用命令 一.总结 一句话总结: 1.批量处理图片的方式? PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本: 2.大量的重复的操作 ...

  4. 网络安全-windows批处理

    文章目录 基础简单命令 批处理 批处理基础 批处理语法总结 批处理练习 基础简单命令 1.重定向 >>为追加 >为覆盖 echo ddd > zft.txt2.type查看文件 ...

  5. Windows批处理命令学习

    Windows批处理命令学习一 Windows的批处理命令固然比不上unix的shell脚本强大,但用好了仍能给我们的工作带来很大作用.一个朋友问我为什么学习批处理命令,我以<程序员修炼之道-- ...

  6. Windows批处理符号简介、常用Dos命令

    三.批处理符号简介  [ 回显屏蔽 @ ] 表示不显示@后面的命令,在***过程中(例如使用批处理来格式化敌人的硬盘)自然不能让对方看到你使用的命令啦.  @用法举例:通过运行批处理文件对比pause ...

  7. php 命令行 循环,Linux_批处理的循环效果脚本,第一次运行 执行命令工A 第 - phpStudy...

    批处理的"循环"效果脚本 第一次运行 执行命令工A 第二次运行 执行命令工B 第三次运行 执行命令工A ................ 原理很简单 用if exist 判断 第一 ...

  8. windows批处理学习

    转自:http://blog.csdn.net/chenlycly/article/details/30480609 第一章 批处理基础 第一节 常用批处理内部命令简介 批处理定义:顾名思义,批处理文 ...

  9. windows批处理脚本bat命令解析【6】常用命令整理

    原文地址:点击打开 预定义的变量 下面是些已经被底层定义好可以直接使用的变量:不会出现在 SET 显示的变量列表中 %CD% - 扩展到当前目录字符串. %DATE% - 用跟 DATE 命令同样的格 ...

最新文章

  1. neo4j中文社区 php,neo4j 社区版搭建教程
  2. BZOJ2339: [HNOI2011]卡农(dp 容斥)
  3. Jenkins 设置镜像_我常用的SpringBoot+Jenkins自动化部署技巧,贼好用,推荐给大家...
  4. 获得网页中元素的位置
  5. 【Assembly】Mixed mode dll unable to load in .net 4.0
  6. 1.线性回归、梯度下降法、岭回归、LASSO回归、最小二乘法
  7. CCS12.0 安装并设置中文
  8. 2020年面向前端开发人员的10个很棒的 JS 库
  9. ​Windows下RSA密钥生成工具openssl​
  10. WebService接口的生成和调用(WebService接口)
  11. u深度u盘制作与装系统教程
  12. 导入oracle 904,江湖救急..ora-904怎么处理?
  13. 展览 | 2018届中国国际信息通信展览的所见所闻
  14. java simon_Java Simon
  15. 电动牙刷也有国产黑马,竟然比千元大牌还厉害 | 钛空实测
  16. javascript合并多层级数组
  17. 棋牌游戏服务器开发心得
  18. 计算机网络安全工作室介绍,计算机网络技术专业 “网络工作室”做法简介
  19. Java程序设计基础【9】
  20. python中求二维列表的最大最小值_python+numpy按行求一个二维数组的最大值方法

热门文章

  1. java 看虚拟机内存_java 虚拟机内存介绍
  2. Python机器学习:线型回归法05衡量线性回归法的指标MES,RMS,MAE
  3. 实验管理员掌握的计算机知识,计算机应用基础知识概述试验.DOC
  4. java整型转换为数组_基于java中byte数组与int类型的转换(两种方法)
  5. 分数加减乘除混合运算带答案_分数分数加减乘除混合运算练习题及答案_0.doc
  6. mysql geometry 附近的人_mysql中geometry类型的简单使用(搜索附近的人)
  7. oracle树子类遍历父类_不懂数据库索引的底层原理?那是因为你心里没点b树
  8. pandas使用dataframe直接绘图时,取消图例(legend)
  9. KNN代码复现python版
  10. 程序—java记事本