批处理中for循环的基本写法
在Windows批处理脚本里,for循环是处理重复任务的利器。比如你每天要整理下载文件夹里的文档,手动一个个移动太麻烦,写个for循环自动跑一遍就完事了。
最基本的格式长这样:
for %%i in (集合) do (
命令
)
注意这里是两个%号(%%i),只有在命令行直接运行时才用单个%,写成批处理文件保存后必须是%%。
遍历文件的例子最实用
假设你有一堆.jpg图片想统一复制到另一个文件夹,可以这么写:
@echo off
for %%f in (*.jpg) do (
copy "%%f" "D:\图片备份\"
)
这段脚本会把当前目录下所有.jpg结尾的文件都复制过去。换成move就是剪切,加上if exist还能判断目标是否存在,避免重复操作。
处理带空格的文件名?加引号就对了
有些文件名带空格,比如“我的照片 2024.jpg”,不加处理会出错。这时候变量要用双引号包起来:
@echo off
for %%f in (*.jpg) do (
echo 正在处理:"%%f"
copy "%%f" "E:\归档\"
)
用for读取文本行也很常见
比如你有个list.txt,每行一个文件名,想逐个检查是否存在:
@echo off
for /f "delims=" %%i in (list.txt) do (
if exist "%%i" (
echo %%i 找到了
) else (
echo %%i 没找到!
)
)
/f 参数专门用来解析文本内容,"delims="表示不分割字段,整行当一个值处理,适合包含空格的路径。
跳过某些行或设置读取行数
有时候前几行是标题不想处理,可以用skip=1跳过第一行:
for /f "skip=1 delims=" %%i in (data.csv) do (
echo 处理数据:%%i
)
如果只想处理前5行,可以用tokens和计数技巧配合,或者结合goto和set来控制次数。
实际应用场景举个例
你在公司做行政,每周都要把各部门交上来的Excel表格汇总归档。写个批处理脚本放在文件夹里,双击一下自动把这些.xls和.xlsx文件移到“已归档”目录:
@echo off
if not exist 已归档 mkdir 已归档
for %%f in (*.xls *.xlsx) do (
move "%%f" "已归档\"
)
echo 所有表格已归档!
pause
下次再收表,点一下就行,不用自己拖来拖去。