You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:02:25