Batch批处理如何在for循环中获取文件夹名并执行多步操作
批处理遍历指定目录提取文件夹名并逐次执行操作实现方案
核心语法规则
- 遍历目录必须使用
for /d参数,搭配通配符匹配目标路径下的所有文件夹节点 - 提取纯文件夹名称(不带前置完整路径),直接调用for变量的
~nx修饰符,会自动剥离路径前缀,只保留文件夹名本身 - for循环的do代码块内可以写任意多的操作逻辑,所有逻辑对单个文件夹执行完成后,才会进入下一个文件夹的遍历流程,不需要额外添加跳转/等待控制
必知避坑点
- 写在
.bat/.cmd脚本文件中时,for循环的自定义变量必须用双百分号%%开头;如果是直接在CMD命令行窗口手动敲命令执行,才用单百分号% - 如果循环体内存在变量赋值操作,且需要在同个代码块内读取变量赋值后的最新值,必须在脚本开头开启延迟变量扩展,否则会读到循环启动前的变量初始值,出现逻辑错误
可直接套用的代码模板
@echo off :: 开启延迟变量扩展,规避循环内变量读取异常问题 setlocal enabledelayedexpansion :: 替换为你需要遍历的目标目录路径,注意路径结尾不要加反斜杠 set "SCAN_PATH=D:\your\actual\directory" :: /d参数指定遍历目录类型,通配符*匹配目标路径下的所有一级子文件夹 for /d %%dir_item in ("%SCAN_PATH%\*") do ( :: 剥离完整路径,提取纯文件夹名称 set "current_folder_name=%%~nxdir_item" echo 正在处理文件夹:!current_folder_name! :: 以下区域直接写你需要基于文件夹名执行的自定义操作即可,示例: :: 1. 基于文件夹名生成同名标记文件 type nul > "%SCAN_PATH%\!current_folder_name!_backup_flag.txt" :: 2. 将文件夹名作为入参调用其他程序/脚本 :: call other_script.bat !current_folder_name! :: 3. 拼接文件夹下的指定文件路径做后续处理 :: set "config_file=%SCAN_PATH%\!current_folder_name!\settings.ini" ) :: 恢复系统默认环境变量状态 endlocal pause
扩展场景说明
如果需要递归遍历目标目录下所有层级的子文件夹,只需要把for循环的语法替换为
for /d /r "%SCAN_PATH%" %%dir_item in (*) do (即可,其余逻辑不变,%%~nxdir_item依然可以正确取到当前遍历到的子文件夹的纯名称。
内容的提问来源于stack exchange,提问作者Harry Manback
相关产品推荐
相关产品推荐

