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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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.
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
6 Kommentare
Neuester Kommentar
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
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.
Gruß
LotPings
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
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
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
Variante 2 gilt auch, wenn der zu auszuwertende "relative" Ordner irgendwo beginnt, z.B selbst auf einer 3ten, 4ten, xten Unterebene liegt.
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
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
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
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