如何使用-tree在目录中显示一层文件夹?

时间:2019-03-04 17:14:33

标签: cmd tree

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

示例C:/Test/Game1

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

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

Too many parameters - 1

4 个答案:

答案 0 :(得分:2)

很遗憾,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)以/B SPACE 开头(|)的所有内容,然后再删除三个< kbd>空格。对于显示比1级更深的文件夹的所有行,都满足这些条件。因此输出将是这样的:

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

要显示更多级别,只需相应地扩展搜索表达式;因此请使用/C:"[| ] [| ] "。直到第2级为止。

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

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

答案 1 :(得分:1)

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

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

实际上echo是不包含字符串|的行。

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

@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命令的工作方式。最好使用我的第一个解决方案。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

仅在我的计算机上可以找到以'+-'开头的行。

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

当然,还有其他命令可以在没有tree的情况下执行此操作。

cmd.exe-DIR /A:D

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