Windows 命令提示符 For 循环
最后修改于 2025 年 7 月 14 日
Windows 命令提示符中的 For 循环是一种强大的构造,用于自动化重复性任务。它可以迭代文件、目录、数字和文本数据。For 循环对于批处理脚本和命令行自动化至关重要。它们有助于减少手动工作并实现复杂的操作。
cmd.exe 中的 For 循环有几种变体,每种都有不同的用途。基本语法包括用于迭代文件、目录、数字范围和命令输出的选项。理解这些变体可以创建高效的自动化脚本。For 循环可以直接在命令提示符和批处理文件中使用。
本教程通过实际示例涵盖了所有 for 循环变体。我们将探讨文件处理、数字迭代、文本解析和目录遍历。每个示例都演示了 For 循环的实际应用。到最后,您将能够将 For 循环实现到您自己的脚本中。
基本 For 循环语法
for 命令有几种形式,每种都有特定的语法和开关。最常见的形式处理文件集或文本数据。基本语法在批处理文件中使用百分号进行变量替换。
@echo off
for %%i in (1 2 3 4 5) do (
echo Number: %%i
)
这个简单的例子演示了 For 循环的基本结构。它迭代数字列表并回显每个数字。%%i 是循环变量。
for %%i in (1 2 3 4 5) do
使用括号括起来的列表中的变量 %%i 定义了一个 for 循环。do 关键字位于要执行的命令之前。
在批处理文件中需要双百分号 (%%),以便命令处理器知道将其视为循环变量,而不是字面上的 % 字符。这可以避免与同样使用 % 的环境变量(例如 %PATH%)混淆。
echo Number: %%i
为每次迭代执行的命令。%%i 被替换为当前项目值。多个命令可以分组在括号中。
C:\Users\Jano>basic_for.bat Number: 1 Number: 2 Number: 3 Number: 4 Number: 5
输出显示循环遍历列表中的所有项目。这种基本模式适用于任何以空格分隔的项目。
迭代文件
For 循环通常用于处理与模式匹配的文件。此示例显示了如何处理当前目录中的文件。
@echo off
echo Text files in current directory:
for %%f in (*.txt) do (
echo Processing: %%f
type %%f
)
此脚本查找所有 .txt 文件并显示其内容。%%f 变量依次保存每个文件名。type 命令显示文件内容。
for %%f in (*.txt) do
它使用通配符模式 *.txt 来匹配所有文本文件。%%f 变量接收每个匹配的文件名。该模式不区分大小写。
type %%f
它显示每个文本文件的内容。这演示了在循环体内处理每个匹配的文件。可以执行多个操作。
数字 For 循环
/l 开关创建迭代数字范围的数字 for 循环。这对于计数和重复操作很有用。
@echo off
echo Counting from 1 to 10:
for /l %%n in (1,1,10) do (
echo %%n
)
echo Counting even numbers 2 to 20:
for /l %%n in (2,2,20) do (
echo %%n
)
此示例显示了两个数字循环。第一个计数 1-10,第二个计数偶数 2-20。步长值控制增量大小。
for /l %%n in (1,1,10) do
以 1 为步长从 1 循环到 10。/l 表示数字循环。参数为(开始、步长、结束)。所有值都必须是整数。
for /l %%n in (2,2,20) do
以 2 为步长从 2 计数到 20(偶数)。步长值可以调整用于不同的序列。负步长向下计数。
C:\Users\Jano>numeric_loop.bat Counting from 1 to 10: 1 2 3 ... 10 Counting even numbers 2 to 20: 2 4 6 ... 20
解析命令输出
For /f 循环解析命令或文件的文本输出。此强大功能使得逐行处理命令结果成为可能。
@echo off
echo Running processes:
for /f "tokens=1 delims=," %%p in ('tasklist /fo csv /nh') do (
echo Process: %%~p
)
echo System drives:
for /f %%d in ('wmic logicaldisk get name ^| findstr ":"') do (
echo Found drive: %%d
)
此脚本演示了解析命令输出。第一个循环处理 tasklist 结果,第二个查找磁盘驱动器。/f 开关启用解析。
for /f "tokens=1 delims=," %%p in ('tasklist /fo csv /nh') do
解析 tasklist 命令的 CSV 输出。“tokens=1 delims=,” 提取第一列。/nh 抑制标题。%%p 接收每个进程名。
for /f %%d in ('wmic logicaldisk get name ^| findstr ":"') do (
echo Found drive: %%d
)
使用 WMIC 查找磁盘驱动器。脱字符 (^) 转义管道符用于命令。%%d 接收每个驱动器字母。简单的输出不需要 token/delimiter。
目录递归
For /r 递归处理目录及其子目录。这对于跨目录树的操作很有用。
@echo off
echo All .exe files in C:\Windows and subfolders:
for /r "C:\Windows" %%f in (*.exe) do (
echo Found: %%~nxf
echo Path: %%~dpf
)
echo Empty directories in current folder tree:
for /r /d %%d in (.) do (
dir /a /b "%%d" | findstr "." >nul || echo Empty: %%d
)
此示例显示了递归文件搜索和空目录检测。/r 开关启用通过子目录进行递归。
for /r "C:\Windows" %%f in (*.exe) do
递归搜索 C:\Windows 中的 .exe 文件。%%f 获取每个文件的完整路径。%%~nxf 提取名称+扩展名,%%~dpf 获取驱动器+路径。
for /r /d %%d in (.) do
/d 开关处理目录而不是文件。(.) 表示递归中的当前目录。与 dir/findstr 结合使用,它可以检测空目录。
处理文本文件中的行
For 循环还可以处理文本文件的每一行。这对于读取配置文件、列表或任何基于行的文件很有用。for /f 命令读取每一行并将其赋给一个变量。
apple banana cherry date
这是一个简单的文本文件,包含水果名称,每行一个。我们将使用批处理脚本中的 for 循环来读取此文件。
@echo off
for /f "delims=" %%l in (fruits.txt) do (
echo Fruit: %%l
)
此脚本读取 fruits.txt 并回显每个水果名称。delims= 选项确保整行都被读取,包括空格。此技术对于逐行处理列表或配置文件很有用。
C:\Users\Jano>read_lines.bat Fruit: apple Fruit: banana Fruit: cherry Fruit: date
此示例演示了如何在批处理脚本中使用 for /f 来处理文本文件的每一行。
使用 for /l 生成乘法表
for /l 循环非常适合生成数字序列。在这里,我们使用它来打印 1 到 10 的 7 的乘法表。
@echo off
for /l %%i in (1,1,10) do (
set /a result=7*%%i
call echo 7 x %%i = %%result%%
)
此脚本使用 set /a 进行算术运算,并使用 call 在循环内展开变量。输出是
7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 ... 7 x 10 = 70
这演示了如何在批处理脚本中使用 for /l 进行数字计算和重复操作。
来源
本教程涵盖了 Windows 命令提示符中的基本 for 循环技术。这些示例为构建强大的自动化脚本提供了基础。通过尝试不同的参数进行练习,以掌握 for 循环的能力。