一、Windows 批处理中的 for 语句

  1. 基本功能

  • 循环列表里的东西

    for %i in (苹果 香蕉 橘子) do echo %i
    

    效果:依次输出“苹果”、“香蕉”、“橘子”。

  • 一步步数数

    for /l %i in (1,1,5) do echo %i
    

    效果:输出 1、2、3、4、5。这里的 1,1,5 表示从 1 开始,每次加 1,到 5 结束。

  1. 常用场景

  • 找文件夹
    只列出当前目录下的文件夹(不显示文件):

    for /d %i in (*) do echo %i
    
  • 处理文件内容
    比如读取 1.txt 文件中的每一行,用冒号 : 分隔后取第二部分:

    for /f "delims=: tokens=2" %i in (1.txt) do echo %i
    
  • 处理带空格的文件名
    如果文件名有空格,需要加双引号:

    for /f "usebackq" %i in ("我的 文件.txt") do echo %i
    
  1. 小技巧
    循环内修改变量时,用 !变量名! 而不是 %变量名%

setlocal enabledelayedexpansion 
for %i in (1 2 3) do (
    set num=!num!%i
    echo 当前拼接结果:!num!
)

效果:依次输出 112123


二、Linux Shell 中的 for 语句

  1. 基本功能

  • 循环数数或列表

    for i in 1 2 3 4 5; do echo $i; done 
    

    效果:输出 1 到 5。

  • 类似数学的循环写法

    for ((i=1; i<=5; i++)); do echo $i; done 
    

    效果同上。

  1. 常用场景

  • 处理文件
    列出当前目录所有文件:

    for file in *; do echo "找到文件:$file"; done 
    
  • 批量操作
    比如批量创建用户(从 userlist.txt 读取用户名):

    for user in $(cat userlist.txt); do 
      useradd $user 
    done 
    
  • 生成序列
    输出 1、3、5、7、9:

    for i in {1..10..2}; do echo $i; done 
    
  1. 小技巧

  • 处理复杂文本
    如果文本中有空格,临时设置按换行符分割:

    IFS=$'\n'  # 按换行分割 
    for line in $(cat data.txt); do 
      echo "内容:$line"
    done 
    
  • 批量 ping 测试
    检查 192.168.1.1 到 192.168.1.5 是否在线:

    for ip in 192.168.1.{1..5}; do 
      ping -c1 $ip && echo "$ip 在线"
    done 
    

三、Windows 和 Linux 的区别总结

简单对比

Windows

Linux

变量写法

%i(双百分号)

$i(单美元符号)

数数写法

for /l %i in (1,1,5)

for i in {1..5}for ((i=1; i<=5; i++))

处理文件

需要配合 dir 命令

直接写 *.txt 即可

适用场景

文件整理、批量改名

脚本自动化、服务器管理


四、实际例子
Windows:批量改名
把当前目录所有 .txt 文件按顺序改名:

set n=1 
for %i in (*.txt) do (
    ren "%i" "文件!n!.txt"
    set /a n+=1
)

Linux:快速生成乘法表

for ((i=1; i<=3; i++)); do   # 简化到3×3 
    for ((j=1; j<=i; j++)); do 
        echo -n "$j×$i=$((i*j)) "
    done 
    echo 
done 

输出:

1×1=1 
1×2=2 2×2=4 
1×3=3 2×3=6 3×3=9