【问题标题】:Batch file to list files and folders with parent directories批处理文件以列出具有父目录的文件和文件夹
【发布时间】:2014-03-05 09:54:00
【问题描述】:

我看到了来自不同人的脚本,他们建议了下面所示的代码:

    @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

【问题讨论】:

    标签: file batch-file directory parent


    【解决方案1】:
    @echo OFF
    SETLOCAL
    pushd %1
    set "tab=/"
    SET "currdir=%cd%"
    call :listFolder >report.txt
    popd
    GOTO :eof
    
    :listFolder
    setlocal
    for /d %%a in (*) do (
     SET "name=%%~fa"
     SETLOCAL ENABLEDELAYEDEXPANSION
     SET name=!name:%currdir%=!
     SET name=!name:\=%tab%!
     ECHO !name!
     ENDLOCAL
     pushd "%%a"
     call :listFolder
     popd
    )
    for %%a in (*) do (
     SET "name=%%~fa"
     SETLOCAL ENABLEDELAYEDEXPANSION
     SET name=!name:%currdir%=!
     SET name=!name:\=%tab%!
     ECHO !name!
     ENDLOCAL
    )
    
    GOTO :eof
    

    有趣的练习。

    基本上,报告会变成“做一个dir/s/b 列表,但用Tab 替换\ 并省略当前目录”——但这个简单的方案不会产生相同的序列...

    (我还用/ 替换了 tab 以使其更容易看到,tab 不是特别明显等等) - 只是选择一个适合的字符...

    【讨论】:

    • 这真的很棒!非常感谢。我想知道为什么 GOTO :eof 是必要的?在编写脚本时,我仍然是一个新手,但该行的目的是什么。
    • 我想要它而不是 dir /s/b 因为现在我可以放入 excel 和 fitler 表。可以轻松地对文件进行排序或在我忘记的文件夹中查找图片哈哈。但是,是的,非常感谢! =)
    • 我使用goto :eof关闭本地环境并返回。我想exit /b 做同样的事情。番茄/番茄。
    【解决方案2】:

    另一个版本:

    @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
    )
    

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多