Batch file可列出具有父目录的文件和文件夹

Batch file可列出具有父目录的文件和文件夹,file,batch-file,directory,parent,File,Batch File,Directory,Parent,我看到过来自不同人士的脚本,他们建议使用以下代码: @echo off setlocal disableDelayedExpansion pushd %1 set "tab= " set "indent=" call :listFolder >report.txt exit /b :listFolder setlocal set "indent=%indent%%tab%" for /d %%F

我看到过来自不同人士的脚本,他们建议使用以下代码:

    @echo off
    setlocal disableDelayedExpansion
    pushd %1
    set "tab=   "
    set "indent="
    call :listFolder >report.txt
    exit /b

    :listFolder
    setlocal
    set "indent=%indent%%tab%"

    for /d %%F in (*) do (
      echo %indent%%%F
      pushd "%%F"
      call :listFolder
      popd
    )
    for %%F in (*) do echo %indent%%%F

exit /b
哪些产出:

Folder 1
   Subfolder 1
      Filename 1
   Subfolder 2
      Filename 1
Folder 2
   Subfolder 1
      Filename 2
      Filename 2
这在一段时间内效果很好,但我想知道是否有办法实现同样的想法,但用一个选项卡分隔父文件夹

Folder 1
Folder 1    Subfolder 1
Folder 1    Subfolder 1     Filename 1
Folder 1    Subfolder 2
Folder 1    Subfolder 2     Filename 1
Folder 2
Folder 2    Subfolder 1
Folder 2    Subfolder 1     Filename 2
Folder 2    Subfolder 1     Filename 2
@echo关闭
SETLOCAL
推送%1
设置“tab=/”
设置“currdir=%cd%”
调用:listFolder>report.txt
邻苯二胺
后藤:eof
:listFolder
setlocal
对于(*)中的/d%%a,请执行以下操作(
设置“名称=%%~fa”
SETLOCAL ENABLEDELAYEDEXPANSION
集合名称=!名称:%currdir%=!
集合名称=!名称:\=%tab%!
回声!名字!
端部
pushd“%%a”
调用:listFolder
邻苯二胺
)
对于(*)中的%%a,请执行以下操作(
设置“名称=%%~fa”
SETLOCAL ENABLEDELAYEDEXPANSION
集合名称=!名称:%currdir%=!
集合名称=!名称:\=%tab%!
回声!名字!
端部
)
后藤:eof
有趣的练习

从本质上讲,报告变成了“执行
目录/s/b
列表,但用Tab替换
\
,并省略当前目录”-但这个简单的方案不会产生相同的序列

(我还将tab替换为
/
,以使其更易于查看,tab不是特别明显,而且全部)-只需选择一个适合的字符即可…

另一个版本:

@echo off
setlocal disableDelayedExpansion
set "pwd=%~1"
if "%pwd%"=="" set "pwd=%cd%"

pushd "%pwd%"
set "indent=   "
call :listFolder1 "%pwd%"
exit /b

:listFolder1 %1
setlocal
set curdir=%~1
for /d %%F in (*) do (
    echo %curdir%%indent%%%F
    for %%S in (*) do echo %curdir%%indent%%%F%indent%%%S
    pushd %%F
    call :listFolder1 "%curdir%%indent%%%F"
    popd
)

这真的很棒!非常感谢。我想知道为什么必须进行“GOTO:eof”?说到脚本编写,我还是个新手,但这行的目的是什么呢?我希望这样做,而不是dir/s/b,因为现在我可以把它放到excel和fitler表中。使文件排序或在我忘记的文件夹中查找图片变得容易哈哈。但是,是的,非常感谢!=)我使用
goto:eof
关闭本地环境并返回。我想
退出/b
也会这样做。西红柿/西红柿。