115129
Goto Top

Batch - Ordnerstruktur bis bestimmte Anzahl von Unterverzeichnisse auslesen und in Textdatei schreiben

Hallo zusammen,

da ich länger nicht mehr hier im Forum war ist es längst überfällig wieder einmal eine Frage zu stellen.

Mein Vorhaben:
Ich möchte per Batch die Ordner-/Verzeichnisstruktur (keine Dateien) z.B. des Laufwerks C:\ D:\ und E:\ auslesen und in eine Textdatei schreiben.
Allerdings soll an diesem Beispiel aus dem Laufwerk C:\ nur die Struktur C:\Verzeichnisname\Verzeichnisname\Verzeichnisname\ ausgelesen werden.
Aus dem Laufwerk D:\ wiederum nur D:\Verzeichnisname\
Und aus dem Laufwerk E:\ wiederum nur E:\Verzeichnisname\Verzeichnisname\
...es folgen noch weitere Laufwerke, die ich jedoch später selbst einbinden kann (hoffe ich zumindest).
Kurzum, der unten aufgeführte Code gibt immer die gleiche Anzahl der Unterverzeichnisse aus. Wie muss der Code geändert werden, dass die Anzahl der aufgelisteten Unterverzeichnisse je nach Laufwerksbuchstabe passt?

Mein derzeitiger Code:
for /d %%i in (C:) do @for /d %%a in ("%%~i\*.*") do echo %%a >>F:\temp\tmp.txt  
for /d %%i in (C:) do @for /d %%a in ("%%~i\*.*") do echo %%a >>F:\temp\tmp.txt  
for /d %%i in (C:) do @for /d %%a in ("%%~i\*.*") do echo %%a >>F:\temp\tmp.txt  

Ergebnis:
C:\Verzeichnisname
D:\Verzeichnisname
E:\Verzeichnisname

Vielen Dank für jegliche Hilfestellungen.

Schöne Grüße,
Blattlaus

Content-Key: 291749

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

Printed on: April 25, 2024 at 04:04 o'clock

Member: rubberman
Solution rubberman Dec 27, 2015 updated at 10:45:31 (UTC)
Goto Top
Hallo Blattlaus.

Du kannst eine Subroutine rekursiv aufrufen.
@echo off &setlocal

 >"F:\temp\tmp.txt" call :recDir "C:" 3  
>>"F:\temp\tmp.txt" call :recDir "D:" 1  
>>"F:\temp\tmp.txt" call :recDir "E:" 2  
exit /b

:recDir dirname level
if %2 equ 0 (
  echo %1
) else (
  REM echo %1
  for /f %%i in ('set /a %2-1') do for /d %%j in ("%~1\*") do call :recDir "%%~j" %%i  
)
exit /b
Wenn du die entsprechenden Überverzeichnisse mit ausgeben willst (z.B. weil es auf Laufwerk C: auch Verzeichnisstrukturen gibt, die eine geringere Rekursionstiefe als 3 haben), dann entferne das REM in Zeile 12.

Grüße
rubberman
Mitglied: 115129
115129 Dec 27, 2015 at 10:45:28 (UTC)
Goto Top
Hallo Rubberman,

vielen Dank für deine sofort funktionierende Lösung.

Natürlich hatte ich es gleich noch gestern Abend getestet und siehe da, alles wie gewünscht face-smile

Allerdings war ich dann zu Müde, um die Antwort gleich zu schreiben, deshalb erst heute.

Vielen Dank nochmals und bis zum nächsten Mal.

Einen schönen Sonntag noch.

Gruß,
Blattlaus