我试图只显示目录中的文件夹。
示例C:/Test/Game1
。
在Game1
中有文件夹folder1
,folder2
,folder3
。但是我不想显示文件夹1
,2
和3
中的更多文件夹。
我使用了-maxdepth 1
,但它显示了错误
Too many parameters - 1
答案 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