mario.steinberg
Goto Top

Nur Verzeichnisse und deren erstes Unterverzeichnis anzeigen

Hallo,

mittels dir /a:d /s /b kann ich alle Verzeichnisse in einem Ordner und deren Unterverzeichnisse anzeigen.
Gibt es eine Möglichkeit, nur bis zu ersten Ebene zu gehen?

Wenn z.B. die Stucktur folgendermaßen ist:

Folder1->Folder2->Folder3

möchte ich nur

Folder1
Folder1/Folder2

sehen und nicht

Folder1
Folder1/Folder2
Folder1/Folder2/Folder3

Dabnke und Gruß,
Mario

Edit:
Besser wäre noch nur
Folder1/Folder2
Kommentar vom Moderator Biber am 02.07.2010 um 08:31:05 Uhr
Tja, leider kommt wohl kein Feedbäck mehr...
Ich setze den Beitrag mal auf "beantwortet".
Zum Schreddern ist er doch zu schade.

Content-ID: 143751

Url: https://administrator.de/contentid/143751

Ausgedruckt am: 19.11.2024 um 20:11 Uhr

godlie
godlie 28.05.2010 um 14:18:42 Uhr
Goto Top
Hallo,

so grob theoretisch dürfte sowas in etwa hinhauen:

for /F %i in ('dir /A:D /b') DO @echo %i\ & @dir /A:D /b %i  

is nur so ne grobe ausgabe.

edit habs mal überarbeitet.
bastla
bastla 28.05.2010 um 14:22:44 Uhr
Goto Top
... oder so:
for /d %i in (*.*) do @for /d %a in ("%~i\*.*") do @echo %a
Grüße
bastla
77559
77559 28.05.2010 um 15:02:49 Uhr
Goto Top
Hallo nochmal Mario,

nein, Dir bietet keine möglichkeit die Folderlevel zu begrenzen, das kannst du aber mit mehreren gestaffelten For Schleifen nachbilden.

Ich habe so was mal mit rekursiv aufgerufener Sub realisiert - aber du magst Subs ja scheinbar nicht so sehr face-wink
Meine Suche danach hat länger gedauert, bastla hat ja schon eine funktionierende Lösung gepostet.

Diese Batchdatei geht vom vorgegebenen Pfad ebenfalls vorgegebene Level tief und zeigt den kompletten Pfad an,
dabei werden nur Ordner der entsprechenden Levelzahl angezeigt.

:: DirLevel.cmd :::::::::::::::::::::::::::::::::::::::::::::::::::::
@Echo off
If NOt Exist "%~1" Goto :Usage  
:: Default ist aktueller Ordner und Tiefe 1
If "%1" EQU "" Call :DirLevel . 1 & Goto :Eof  
:DirLevel
Set /A Level=%~2 -1
Pushd %1 >NUL 2>&1
For /F "delims=" %%A in ('Dir /B /AD 2^>NUL') do If %Level% LSS 1 (  
  Echo %%~fA
) Else (
  Call :DirLevel "%%~fA" %Level%  
)
Popd
Goto :EOF
:Usage
Echo Usage: %~f0 x:\Ordner D 
Echo    D : Dezimalziffer Leveltiefe ab angegebenem Ordner
Goto :Eof

Gruß
LotPings
Biber
Biber 28.05.2010 um 17:09:46 Uhr
Goto Top
Moin Mario Steinberg,

zwei weitere Varianten möchte ich noch beisteuern.
Eine triviale, die nur passt, wenn der "Folder1" in deinem Beispiel direkt vom Root abgeht (z.B. D:\temp oder F:\dokus).

Dann reicht vom CMD-Prompt aus
>For /f "Delims=\ tokens=2-4" %a in ('dir /b /s /a:d x:\Folder1') do @if "%a%b" neq "" if "%c" equ "" @echo %a\%b
...
dokus\M$Openformats
dokus\InsideActiveDirectory
dokus\DB2
dokus\Sql
dokus\VbArchiv
...

Variante 2 gilt auch, wenn der zu auszuwertende "relative" Ordner irgendwo beginnt, z.B selbst auf einer 3ten, 4ten, xten Unterebene liegt.
> REM z.B dieser Ordner ...in Anführungszeichen wegen evtl Leerzeichen und MIT abschliessendem Backslash definieren
>set Folder1="c:\Dokumente und Einstellungen\Biber\"

>for /f "delims=" %i in ('dir /b /a:d /s %Folder1%') do @if /i  "%~dpi" equ %Folder1% echo %i
....
c:\Dokumente und Einstellungen\Biber\Cookies
c:\Dokumente und Einstellungen\Biber\Desktop
c:\Dokumente und Einstellungen\Biber\DokumentenAblage
c:\Dokumente und Einstellungen\Biber\Favoriten
....
>REM und wenn die Ausgabe so sein soll [mit Slash statt Backslash] wie von dir gewünscht:
>for /d %a in (%Folder1%\..) do @for /f "delims=" %i in ('dir /b /a:d /s "%~a"') do @if /i  "%~dpi" equ "%~fa\" echo %~nxa/%~nxi
Biber/Cookies
Biber/Desktop
Biber/DokumentenAblage
Biber/Favoriten
...


P.S. Ich würde bei deinen Anforderungen als Ziel anstreben, das Ganze einmal am CMD-Prompt durchzukaspern und zu verstehen.
Einen (egal ob ein- oder 7zeiligen) Batch dafür irgendwo zu speichern, der dann wieder nur für ein bestimmtes Verzeichnis passt und für den dir wahrscheinlich kein sprechender Batch-Name einfällt, den du ja wieder intuitiv doppelklickst...so sparen Batche KEINE Zeit.


Grüße
Biber
Biber
Biber 26.06.2010 um 20:37:56 Uhr
Goto Top
Moin Mario.Steinberg,

wie ist denn der gefühlte Beantwortetheitsgrad deiner Frage?
Hat es dich weitergebracht, zutiefst ratlos gemacht, ins Kloster getrieben, kann ein Haken dran oder sind Fragen offen?

Bitte um Feedback.
Biber
AndreasW63
AndreasW63 23.09.2013 um 11:12:28 Uhr
Goto Top
Hallo LotPings,
hallo Biber,

ich versucht habe das Skript "Dirlevel.cmd" anzupassen, um mir neben der Anzeige der Verzeichnisse in einer bestimmten Tiefe auch noch den Besitzer des Verzeichnisses anzeigen zu lassen.

Dazu habe ich dem Skript in Zeile 9 den Parameter /Q hinzugefügt.

:: DirLevel.cmd :::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
If NOt Exist "%~1" Goto :Usage
:: Default ist aktueller Ordner und Tiefe 1
If "%1" EQU "" Call :DirLevel . 1 & Goto :Eof
:DirLevel
Set /A Level=%~2 -1
Pushd %1 >NUL 2>&1
For /F "delims=" %%A in ('Dir /B /AD /Q 2^>NUL') do If %Level% LSS 1 (
Echo %%~fA
) Else (
Call :DirLevel "%%~fA" %Level%
)
Popd
Goto :EOF
:Usage
Echo Usage: %~f0 x:\Ordner D
Echo D : Dezimalziffer Leveltiefe ab angegebenem Ordner
Goto :Eof

Vermutlich funktionieren die Parameter /B und /Q nicht gemeinsam in einer Zeile.
Das Ergebnis (Beispiel) sieht wie folgt aus:

q:\Vorarchiv\PROJEKTE\Exxxxxxxxp\2825
q:\Vorarchiv\PROJEKTE\Gxxxxe\2387
q:\Vorarchiv\PROJEKTE\Gxxxxe\2390
q:\Vorarchiv\PROJEKTE\Gxxxxe\2407
q:\Vorarchiv\PROJEKTE\Gxxxxe\2410
q:\Vorarchiv\PROJEKTE\Gxxxxe\2879
q:\Vorarchiv\PROJEKTE\Gxxxxxxk\2490
q:\Vorarchiv\PROJEKTE\Gxxxxxxk\2772
q:\Vorarchiv\PROJEKTE\Hxxxe\2982
q:\Vorarchiv\PROJEKTE\Hxxxxxxxxxxn\1315
q:\Vorarchiv\PROJEKTE\Hxxxxxxxxxxn\1797

Gibt es eine Lösung ?

Bitte um Antwort

Andreas