求助:Batch脚本递归列出.js文件时如何显示其所在目录
解决Batch脚本按目录分组列出JS文件的问题
嘿,我来帮你搞定这个需求!你原来的脚本确实只能逐个输出JS文件的完整路径,没法按目录把同目录下的文件聚合在一起显示。咱们可以通过先遍历目录,再在每个目录下收集JS文件的方式来实现你要的输出格式。
完整解决方案脚本
@echo off setlocal enabledelayedexpansion :: 清空输出文件(如果已存在),或者创建新文件 echo. > names.txt :: 递归遍历指定起始目录下的所有子目录(这里用C:\project作为起始目录) for /d /r "C:\project" %%d in (*) do ( :: 初始化当前目录的JS文件列表变量 set "js_files=" :: 遍历当前目录下的所有*.js文件 for %%f in ("%%d\*.js") do ( :: 只提取文件名(不含路径),追加到列表中 set "js_files=!js_files! %%~nxf" ) :: 如果当前目录有JS文件,才写入输出文件 if not "!js_files!"=="" ( echo %%d!js_files! >> names.txt ) ) endlocal pause
关键部分解释
setlocal enabledelayedexpansion:这是Batch里处理循环内变量修改的必备设置,能让我们在循环中实时读取和更新js_files变量的值。for /d /r "C:\project" %%d in (*):递归遍历C:\project下的所有子目录,%%d会保存当前遍历到的目录路径。如果想从当前脚本所在目录开始遍历,把"C:\project"改成.即可。%%~nxf:Batch变量扩展语法,用来提取文件的名称+扩展名(去掉完整路径),正好符合你要的输出格式。- 空目录过滤:通过
if not "!js_files!"==""判断,避免把没有JS文件的目录写入输出。
输出效果
运行后names.txt里的内容会和你要求的格式完全一致:
c:\project project.js project_time.js c:\project\core core.js core_render.js core_application.js
内容的提问来源于stack exchange,提问作者Panther Coder
相关产品推荐
相关产品推荐

