【问题标题】:How to show 1 layer of folders in a directory with -tree?如何使用-tree在目录中显示一层文件夹?
【发布时间】:2019-03-06 20:35:51
【问题描述】:

我试图只显示目录中的文件夹。

例如C:/Test/Game1

Game1 中有文件夹folder1folder2folder3。但文件夹123 中有更多文件夹,我不想显示。

我使用了-maxdepth 1,但它显示错误

Too many parameters - 1

【问题讨论】:

  • 哦,对不起,我只是因为答案而感到困惑......无论如何,这个怎么样:tree"C:\Test\Game1" /A |findstr/V /B /R /C:"[| ] "
  • @aschipfl 根据我的回答使用相反的值也可以(删除/V)。顺便说一句,为什么不将所有这些参数合并到/VBRC:"regex/string" 中?
  • @double-beep,我猜有几种可能性,/B 也可以替换为^... 无论如何,合并的参数没有记录(至少在这里:@987654341 @),并且在解释代码的作用时更容易处理(请参阅我的答案)...

标签: cmd tree


【解决方案1】:

遗憾的是,Windows tree command 不支持最大深度选项。但是,您可以通过以下方式通过findstr command 过滤输出:

tree "C:\Test\Game1" /A | findstr /V /B /R /C:"[| ]   "

假设tree 命令的输出类似于(使用 ASCII 字符 (/A) 而不是扩展字符,因为它们更容易处理,因为它们不依赖于当前代码页):

Folder PATH listing for volume &&&&
Volume serial number is ####-####
C:\TEST\GAME1
+---folder1
|   +---folder11
|   |   +---folder111
|   |   \---folder112
|   \---folder12
|       +---folder111
|       \---folder112
+---folder2
|   +---folder21
|   \---folder22
\---folder3
    +---folder31
    \---folder32

findstr 命令删除 (/V) 以 |SPACE 开头 (/B) 的所有内容,然后是另外三个 SPACEs。显示比 1 级更深的文件夹的所有行都满足这些条件。因此输出将是这样的:

Folder PATH listing for volume &&&&
Volume serial number is ####-####
C:\TEST\GAME1
+---folder1
+---folder2
\---folder3

要显示更多级别,只需相应地扩展搜索表达式;所以要下到第 2 级,请使用/C:"[| ] [| ] "

要隐藏标头(包含卷信息和大写根路径),只需在命令行中附加 SPACE/C:"[^+|\\]"

请注意,Windows 路径分隔符是\,而不是/

【讨论】:

    【解决方案2】:

    因此,您想要以tree 格式(当然是ASCII 字符)打印文件夹中的所有目录。受到 aschipfl 解决方案的启发,我提出了相反的解决方案:

    tree /A "C:\Test\Game1" | findstr /BRC:"[^| ] "
    

    实际上echoes 行不包含字符串|

    对于更困难/复杂的解决方案,我想出了:

    @echo off
    
    set "counter=0"
    
    cd /D "C:\Test\Game1"
    
    echo FOLDER PATH listing
    for /F "skip=1 tokens=*" %%A IN ('vol') do echo %%A
    echo C:.
    
    for /F "delims= eol=" %%B IN ('dir /B /AD') do set /a "counter+=1"
    set "_counter=0"
    
    setlocal EnableDelayedExpansion
    for /F "delims=" %%C IN ('dir /B /AD') do set /a "_counter+=1" & if not !_counter! EQU %counter% (echo +---%%C) else (echo \---%%C)
    
    pause
    exit /b 0
    

    但这根本不是一个好的解决方案:它只是复制tree 命令的工作方式。最好使用我的第一个解决方案。

    【讨论】:

    • 我没有提到它,但我希望它与 regedit 中的 cmd 的“自动运行”一起使用。 Aschipfl 的那个不起作用,但是这个起作用。太棒了!
    • @Matt,您是在谈论适用于 AutoRun 的 tree/findstr 方法吗?你是怎么实现的?
    【解决方案3】:
    C:\Test\Game1" /A |findstr/V /B /R /C:"[| ] "
    

    【讨论】:

      【解决方案4】:

      在我的机器上只寻找以'+-' 开头的行。

      tree /A "C:\src" | findstr /BR "[+\\]-"
      

      当然,没有tree,还有其他命令可以做到这一点。

      cmd.exe - DIR /A:D

      powershell.exe - Get-ChildItem -Directory -Recurse -Depth 0

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-04
        • 2016-10-23
        • 2019-07-28
        • 2011-01-11
        • 2021-03-18
        • 1970-01-01
        • 2014-09-17
        相关资源
        最近更新 更多