在 DOS 批处理中,无论使用哪种 for循环形式(如 for、for /d、for /r、for /l、for /f),变量的读取和操作方法基本一致,但也存在一些细微差别。以下是总结:
一、变量读取的通用方法
1. 直接引用变量
使用 %%变量名 引用循环变量的值:
for %%i in (file.txt) do echo 文件名为: %%i
2. 文件属性修饰符
通过 %%~ 系列修饰符获取文件相关信息(仅适用于处理文件路径的变量):
| 修饰符 | 作用 |
| %%~i | 去除变量 %%i的引号(如果有) |
| %%~fi | 获取完整路径名 |
| %%~di | 获取驱动器号 |
| %%~pi | 获取路径(不含驱动器) |
| %%~ni | 获取文件名(不含扩展名) |
| %%~xi | 获取扩展名(含 .) |
| %%~ti | 获取文件日期 / 时间 |
| %%~zi | 获取文件大小(字节) |
示例:
for %%i in (test.txt) do (
echo 完整路径: %%~fi
echo 文件名: %%~ni
echo 扩展名: %%~xi
)
二、变量操作的核心方法
1. 字符串截取
使用 !变量:~起始位置,长度! 语法(需启用延迟扩展):
@echo off
setlocal enabledelayedexpansion
for %%i in (abcdef) do (
set str=%%i
echo 前3个字符: !str:~0,3! # 输出 abc
echo 后2个字符: !str:~-2! # 输出 ef
)
2. 字符串替换
使用 !变量:旧字符串=新字符串! 语法(需延迟扩展):
@echo off
setlocal enabledelayedexpansion
for %%i in (hello.world) do (
set str=%%i
echo 替换后: !str:.=_! # 输出 hello_world
)
3. 变量拼接
直接在命令中组合多个变量:
for %%i in (a b c) do (
for %%j in (1 2) do (
echo 组合: %%i%%j # 输出 a1, a2, b1, b2, c1, c2
)
)
三、不同for类型的变量差异
1.for /f的特殊处理
当使用 /f解析文本时,变量默认指向第一列(tokens=1),后续列需用 %%j、%%k等引用:
for /f "tokens=1,2 delims=," %%i in ("a,b,c") do (
echo 第一列: %%i # 输出 a
echo 第二列: %%j # 输出 b
)
2.数值变量(for /l)
在数值循环中,变量存储的是数字,但可作为字符串处理:
for /l %%i in (1,1,3) do (
set num=%%i
echo 数值转字符串: !num!0 # 输出 10, 20, 30
)
四、延迟变量扩展(关键!)
在循环内部动态修改变量时,必须启用延迟扩展(setlocal enabledelayedexpansion),并使用 !变量! 而非 %变量%:
错误示例(无延迟扩展)
@echo off
set count=0
for %%i in (*.txt) do (
set /a count+=1 # 无法正确更新
echo 文件%count%: %%i # 始终输出 文件0: ...
)
正确示例(启用延迟扩展)
@echo off
setlocal enabledelayedexpansion
set count=0
for %%i in (*.txt) do (
set /a count+=1
echo 文件!count!: %%i # 正确输出 文件1: ..., 文件2: ...
)
五、变量操作汇总表
|
操作类型 | 语法 | 示例(需延迟扩展) | 输出结果 |
| 字符串截取 |
!变量:~起始位置,长度! |
!str:~0,3! | 前 3 个字符 |
| 字符串替换 |
!变量:旧=新! |
!str:world=universe! | 替换指定字符串 |
| 字符串拼接 | 直接组合 | echo %%i-!suffix! | 拼接后的字符串 |
| 数值计算 |
set /a 变量=表达式 | set /a num=%%i+10 | 数值计算结果 |
| 文件属性获取 |
%%~修饰符变量 |
%%~ni(文件名)、%%~zi(大小) | 文件相关信息 |
六、注意事项
1.延迟扩展的适用场景:仅在循环内部动态修改变量时需要,静态引用变量(如直接使用 %%i)无需延迟扩展。
2.文件路径引号:处理包含空格的路径时,建议用双引号包裹变量(如 "%%i")。
3.特殊字符转义:在字符串替换中,某些字符(如 &, |, >)需用 ^ 转义。
掌握这些方法后,你可以在任何 for循环中灵活处理变量信息。
1057

被折叠的 条评论
为什么被折叠?



