bat总结10------for的用法

版权声明:一起学习,一起成长,欢迎关注 奔跑的犀牛先生 https://blog.csdn.net/xuemanqianshan/article/details/88216029

1 循环命令 for的基础语法 

  • 面向过程语言的基本定义
  • 在这里for 不是一个 block ,而也只是1个语句
  • 所以for 表示条件符合时,执行这一条语句多次
  • 基础语法:            
  • 在cmd窗口中:      for %var in (set) do command
  • 在批处理文件中:  for %%var in (set) do command
  • set是元素结合,可以包含多个元素
  • 每个元素之间,用空格键、跳格键、逗号、分号或等号分隔
  • 如1.txt,如*.bat,如 a,b,c,d,如 (c: d: e: f:)  如  dir *.* 但是如 abcd 只被认为是一个元素
  • %%var ,只能是1个字母,默认会区分大小写!!!也就是只能是小写或大写字母,最多52种可能性
  • 会往下顺延,如果循环体是 %%i ,另外几个参数就是 %%j    %%k,如果是%%a 后面会延%%b %%c

可能出错的地方

  • 循环体变量不能用%var%写法,for C:\Users\pc\bat %%c in (*.bat) do echo %c% 这个错误在 %c%
  • 虽然 for 循环的其他地方也可以用 %var%
  • 注意在shell里写 %var
  • 在bat脚本里写 %%var
  • for %%c in (001.txt) do echo %%c, in () do 这些中间的空格不可少
  • for in do 几个关键字不可省略
  • () 不可省

测试例子

@echo off
echo next step
for %%c in (*.bat) do echo %%c



 

for 的 开关参数

  • for  c:\\ %%i in (set) do command
  • for /l %%i in (1,1,10)  do command
  • for /d %%i in (set) do command          只在目录里查
  • for /r  %%i  in (set) do command         会在目录和子目录里查找
  • for /f "skip=4 eol=; tokens=2,3* delims=, " %i in (1.txt) do command
  • skip 跳过前面几行
  • eol 忽略开头为这个的
  • tokens 列属性,第几列
  • delims 分隔符,可以多个直接写一起,如果是空格,需要delims放最后

测试例子 各种同


for %%i in (*.txt) do find "abc" %%i
对当前目录里所有的txt文件执行 find 命令
for /r . %%i in (*.txt) do find "abc" %%i
在当前目录和子目录里所有的.txt文件中搜索包含 abc 字符串的行
for /r d:mp3 %%i in (*.mp3) do echo %%i>>d:mp3.txt
把 d:mp3 及其子目录里的mp3文件的文件名都存到 d:mp3.txt 里去
for /l %%i in (2,1,8) do echo %%i
生成2345678的一串数字,2是数字序列的开头,8是结尾,1表示每次加1

测试例子 for /f

for /f %%i in (.)  do echo %%i

for /f %%i in (*.*) do echo %%i

完全不一样


for /f %%i in ('set') do echo %%i                 对 set 命令的输出结果循环调用,每行一个
for /f "eol=P" %%i in ('set') do echo %%i     取 set 命令的输出结果,忽略以 P 开头的那几行
for /f "delims=" %%i in (d:mp3.txt) do echo %%i    显示 d:mp3.txt 里的每个文件名,每行一个,支持带空格的名称
for /f "skip=5 tokens=4" %%a in ('dir') do echo %%a
对 dir 命令的结果,跳过前面5行,余下的每行取第4列,每列之间的分隔符为默认的"空格", "delims=," 是2个分隔符
可以注意到 dir 命令输出的前5行是没有文件名的


for /f "tokens=1,2,3 delims=- " %%a in ('date /t') do (
echo %%a
echo %%b
echo %%c
)


对 date /t 的输出结果,每行取1、2、3列
第一列对应指定的 %%a ,后面的 %%b 和 %%c 是派生出来的,对应其它列
分隔符指定为 - 和"空格",注意 delims=- 后面有个"空格"
其中 tokens=1,2,3 若用 tokens=1-3 替换,效果是一样的
for /f "tokens=2* delims=- " %%a in ('date /t') do echo %%b
取第2列给 %%a ,其后的列都给 %%b

猜你喜欢

转载自blog.csdn.net/xuemanqianshan/article/details/88216029