一、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 | 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
通过以上例子,可以快速上手两种系统的 for
循环,满足日常批量操作需求。