Как показать 1 слой папок в каталоге с -tree? - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь показать только папки в каталоге.

Пример C:/Test/Game1.

В Game1 есть папки folder1, folder2, folder3,Но в папке 1, 2 и 3 есть еще папки, которые я не хочу показывать.

Я использовал -maxdepth 1, но он появляется с ошибкой

Too many parameters - 1

Ответы [ 4 ]

0 голосов
/ 05 марта 2019

На моей машине работает только поиск строк, начинающихся с '+-'.

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

Конечно, есть и другие команды, которые могут сделать это без tree.

cmd.exe - DIR /A:D

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

0 голосов
/ 04 марта 2019

Итак, вы хотели напечатать все каталоги в папке в формате tree (конечно, символы ASCII).Вдохновленный решением aschipfl, я пришел к противоположному:

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

, который на самом деле echo es строки, которые не содержат строки |.

Для более сложных /Сложное решение, я придумал:

@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.Лучше используйте мое первое решение.

0 голосов
/ 04 марта 2019

Команда Windows tree , к сожалению, не поддерживает параметр максимальной глубины.Однако вы можете отфильтровать вывод с помощью команды findstr следующим образом:

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 и сопровождается еще тремя SPACEs .Эти критерии выполняются для всех строк, которые показывают папку, которая находится глубже уровня 1. Следовательно, вывод будет выглядеть примерно так:

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

Чтобы отобразить больше уровней, просто расширьтепоиск выражения соответственно;чтобы спуститься до уровня 2, используйте /C:"[| ] [| ] ".

Чтобы скрыть заголовок (содержащий информацию о томе и корневой путь верхнего регистра), просто добавьте SPACE и /C:"[^+|\\]" в командной строке.

Обратите внимание, что разделитель пути Windows равен \, но не /.

0 голосов
/ 04 марта 2019
C:\Test\Game1" /A |findstr/V /B /R /C:"[| ] "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...