bat 脚本之 for 循环

时间:2025-01-29 07:45:33

目录

1、基本语法

2、循环查找文件

 3、读取文件内容

3.1、 整个文件读取

3.2、选择跳过行读取


1、基本语法

echo test
@echo off

for %%a in (A B C) do echo %%a

pause

表示 for 循环打开括号中变量或者字符串,赋值给 %%a ,do 后面跟命令行或者变量。以上输出:(@echo off 表示后面关闭 echo 输入显示,直接给结果,简洁)

F:\workspace>echo test
test
A
B
C

这里就是循环打印 A B C,安照空格、逗号、跳格来分割文字。所以等同于下面:

echo test
@echo off

for %%a in (A
B
C) do echo %%a

for %%a in (A,B,C) do echo %%a

pause

2、循环查找文件

echo test
@echo off

for %%a in (*.txt) do echo %%a

pause

这样表示在当前目录下,查找所有 txt 文件。如果需要递归查找当前目录下所有文件夹内的txt文件,需要加 /r

echo test
@echo off

for /r %%a in (*.txt) do echo %%a

pause

分别输出:

F:\workspace\test>echo test
test

F:\workspace\test>echo test
test
F:\workspace\test\
F:\workspace\test\qwe\

 3、读取文件内容

读取文件内容需要使用 for /f , /f 这个就是打开文件的,我们来查看下 内容

# 内容

11 22 33 44
AA BB CC DD

3.1、 整个文件读取

echo test
@echo off

for /f %%a in () do echo %%a

pause

输出如下 

F:\workspace\test>echo test
test
11
AA

 这里按照换行输出的,默认按空格分割,取每行第一个,需要全部输出就得指定分割方式,或者把所有分割内容打印,如下:

echo test
@echo off

for /f "delims=" %%a in () do echo %%a

pause

这里 "delims=" 表示不分割了,或者加上 tokens 指令输出几个分割,如下

echo test
@echo off

for /f "tokens=1,* delims= " %%a in () do echo %%a %%b

pause

表示分割后,输出每行第一个到*(最后)一个。这里后面要加上两个变量,且要是连续的,按照 a-z 的顺序。以上两种效果一样,打印如下

F:\workspace\test>echo test
test
11 22 33 44
AA BB CC DD

 

3.2、选择跳过行读取

echo test
@echo off

for /f "eol=1 tokens=1,* delims= " %%a in () do echo %%a %%b

pause

eol=1 表示跳过1开头的行,注意只能写一个,不能写 11 这样的

echo test
@echo off

for /f "skip=1 tokens=1,* delims= " %%a in () do echo %%a %%b

pause

skip=1 表示跳过开头一行,从第二行开始读取。