一、Windows 批处理中的 for
语句
基本功能
循环列表里的东西
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 结束。
常用场景
找文件夹
只列出当前目录下的文件夹(不显示文件):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
小技巧
循环内修改变量时,用!变量名!
而不是%变量名%
:
setlocal enabledelayedexpansion
for %i in (1 2 3) do (
set num=!num!%i
echo 当前拼接结果:!num!
)
效果:依次输出 1
、12
、123
。
二、Linux Shell 中的 for
语句
基本功能
循环数数或列表
for i in 1 2 3 4 5; do echo $i; done
效果:输出 1 到 5。
类似数学的循环写法
for ((i=1; i<=5; i++)); do echo $i; done
效果同上。
常用场景
处理文件
列出当前目录所有文件: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
小技巧
处理复杂文本
如果文本中有空格,临时设置按换行符分割: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:批量改名
把当前目录所有 .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
评论