如何编写Bat脚本递归列出当前文件夹下TXT文件的相对路径与文件名
在Bat脚本中递归列出带相对路径的.txt文件
这里提供两种可行的脚本方案,都能满足你只输出文件名及相对文件夹路径的需求:
方案一:利用FOR /R快速实现
@echo off setlocal enabledelayedexpansion :: 遍历当前目录及子目录下所有.txt文件 for /r %%f in (*.txt) do ( :: 移除绝对路径中的当前目录前缀,得到相对路径 set "relpath=%%f" set "relpath=!relpath:%cd%\=!" echo !relpath! ) endlocal
说明
- 启用
enabledelayedexpansion是为了在循环中动态修改变量值 %cd%会获取当前脚本运行的目录,通过字符串替换去掉绝对路径的前缀,直接得到相对路径
方案二:改进你原来的递归遍历逻辑
针对你提供的递归脚本,修改后可以正确拼接相对路径:
@echo off setlocal enabledelayedexpansion :: 初始调用时传递空路径(表示当前根目录) call :treeProcess "" goto :eof :treeProcess set "current_rel_path=%~1" :: 输出当前目录下的.txt文件 for %%f in (*.txt) do ( if "!current_rel_path!"=="" ( echo %%f ) else ( echo !current_rel_path!\%%f ) ) :: 递归遍历子目录 for /d %%d in (*) do ( :: 拼接子目录的相对路径 if "!current_rel_path!"=="" ( set "new_rel_path=%%d" ) else ( set "new_rel_path=!current_rel_path!\%%d" ) cd %%d call :treeProcess "!new_rel_path!" cd .. ) goto :eof endlocal
说明
- 通过递归调用时传递当前的相对路径前缀,每次进入子目录就拼接新的路径部分
- 根目录下的文件直接输出文件名,子目录下的文件则拼接完整相对路径
验证示例
以你给出的目录结构(当前目录为C:\test)运行脚本,会输出:
a.txt Folder 1\a1.txt Folder 1\Folder 1.1\File a2.txt
内容的提问来源于stack exchange,提问作者JustNatural
相关产品推荐
相关产品推荐

