tomcig
Goto Top

Hilfe bei Batch für Ordnerlisten

Hallo,

nach mehreren Versuchen mit unbefriedigendem Ergebnis wende ich mich mal an euch.

Schaffe es nicht eine vernünftige txt von meinen Ordnerinhalten zu erstellen.
Folgende Ausgangslage:

Ein Netzlaufwerk Z mit folgender Ordnerstruktur:

Ein Hauptordner,
darin befinden sich weitere Ordner von
zBsp A-Z und darin jeweils eine weitere Ordnerebene mit Dateien.
Von dieser letzten Ordnerebene benötige ich eine Liste mit nur den Namen aller Ordner alphabetisch sortiert.
Die Liste vorzugsweise speichern auf dem Desktop.


Würde mich über Hilfe sehr freuen.

LG
Tom

Content-ID: 6546176037

Url: https://administrator.de/forum/hilfe-bei-batch-fuer-ordnerlisten-6546176037.html

Ausgedruckt am: 03.04.2025 um 17:04 Uhr

Penny.Cilin
Penny.Cilin 28.03.2023 um 19:48:07 Uhr
Goto Top
Welchen Batchcode hast Du bisher?
Zeige den Code, welchen Du bisher entwickelt hast
TomCig
TomCig 28.03.2023 um 20:29:32 Uhr
Goto Top
Habe bisher mit der Eingabeaufforderung gearbeitet. Funktioniert soweit bis das vor dem Ordnernamen der Pfad angezeigt wird. Und zu Beginn der txt Datei eine Auflistung der Unterordner.

Hiermit arbeite ich gerade:
dir /o/b/ad/s z:\hauptordner > c:\users\tom\desktop\liste.txt
DarkZoneSD
DarkZoneSD 28.03.2023 aktualisiert um 21:26:20 Uhr
Goto Top
Moin,

wäre tree was für dich?
cd Z:\Hauptordner
tree > C:\users\<username>\Desktop\Ordnerstruktur.txt

Grüße

Florian
TK1987
TK1987 28.03.2023 um 21:32:43 Uhr
Goto Top
Moin Tom,

@echo off

set "MAIN=D:\Hauptordner"  
set "OUT=%UserProfile%\Desktop\output.lst"  

>"%OUT%~tmp" (for /d %%A in ("%MAIN%\*") do for /d %%B in ("%%A\*") do dir /b /ad "%%B")  
>"%OUT%" sort "%OUT%~tmp"  
del "%OUT%~tmp"  

Gruß Thomas
TomCig
TomCig 28.03.2023 um 21:52:24 Uhr
Goto Top
@Florian

Hier passiert leider gar nix

@thomas

hier bekomme ich zwar eine outputdatei. Das ist aber nur eine Miniliste mit Namen die ich nicht benötige, also z.Bsp Dateinamen o.ä....benötige aber die Ordnernamen.

LG
Tom
TK1987
TK1987 28.03.2023 um 21:57:33 Uhr
Goto Top
Zitat von @TomCig:
hier bekomme ich zwar eine outputdatei. Das ist aber nur eine Miniliste mit Namen die ich nicht benötige, also z.Bsp Dateinamen o.ä....benötige aber die Ordnernamen.
Dateinamen können da nicht rauskommen, keiner der Befehle listet Dateien auf sondern nur Ordner. Der Fehler muss bei dir liegen, bei mir klappt das Ganze im Test einwandfrei.

Gruß Thomas
DarkZoneSD
DarkZoneSD 28.03.2023 um 21:59:07 Uhr
Goto Top
Oh sieht so aus als hätt ich einen wichtigen Teil der Frage überlesen, tut mir leid face-smile
TomCig
TomCig 28.03.2023 aktualisiert um 23:21:36 Uhr
Goto Top
@thomas

du hattest Recht, es werden doch keine Dateinamen angezeigt.

Habe in Zeile 3 nur den Pfad angepasst.

Hier kommt dann u.a folgendes in der Ausgabedatei:

2004
2005
2006
2007
2008
2009
2010
...

Es gibt aber keine Ordner mit diesen Bezeichnungen.

Habe diese Ordnerstruktur :

Ordner\Ordner1
\A\Ordner Ha
\Ordner He
\Ordner Hi
\B\Ordner Ho
\Ordner Hu
\Ordner Da
\C\Ordner Di
\Ordner Du
\Ordner Do

In der Ausgabeliste sollte jetzt stehen:
Ha
He
Hi
Ho
Hu
Da
Di
Du
Do
TK1987
TK1987 28.03.2023 um 23:57:20 Uhr
Goto Top
Zitat von @TomCig:
Hier kommt dann u.a folgendes in der Ausgabedatei:

2004
2005
2006
2007
2008
2009
2010
...

Es gibt aber keine Ordner mit diesen Bezeichnungen.
irgendwo müssen die ja herkommen.

Mach mal folgendes:
@echo off

set "MAIN=D:\Hauptordner"  
set "OUT=%UserProfile%\Desktop\output.lst"  

>"%OUT%" (for /d %%A in ("%MAIN%\*") do for /d %%B in ("%%A\*") do for /d %%C in ("%%B\*") do echo %%C)  
so erhälst du in der output.lst die Ordner mit voller Pfadangabe und kannst gucken, wo diese Ordner sind.
TomCig
TomCig 29.03.2023 aktualisiert um 01:07:58 Uhr
Goto Top
Ok Thomas,
wir sind eine Ebene zu tief.
Er listet alles unter der Ebene die ich brauche.

LG
TK1987
TK1987 29.03.2023 um 08:08:48 Uhr
Goto Top
Moin,

Ok Thomas,
wir sind eine Ebene zu tief.

Habe diese Ordnerstruktur :
Ordner\Ordner1
              \A\Ordner Ha
                \Ordner He
                \Ordner Hi
              \B\Ordner Ho
                \Ordner Hu
                \Ordner Da
              \C\Ordner Di
                \Ordner Du
                \Ordner Do

In der Ausgabeliste sollte jetzt stehen:
Ha
He
Hi
Ho
Hu
Da
Di
Du
Do

Gut, dann so:
@echo off

set "MAIN=D:\Hauptordner"  
set "OUT=%UserProfile%\Desktop\output.lst"  

>"%OUT%~tmp" (for /d %%A in ("%MAIN%\*") do for /f "Tokens=2" %%B in ('dir /b /ad "%%A"') do echo %%B)  
>"%OUT%" sort "%OUT%~tmp"  
del "%OUT%~tmp"  

Gruß Thomas
TomCig
TomCig 29.03.2023 um 11:02:39 Uhr
Goto Top
Hab ich versucht, jetzt listet er mir nur das 2te Wort des Ordnernames.
Auch die Sortierung ist nicht richtig. Sie soll alphabetisch je Ordner sein.

LG
Tom
DarkZoneSD
DarkZoneSD 29.03.2023 um 11:09:00 Uhr
Goto Top
Gibt es eig. Einen Grund dafür das es in Batch sein muss? ist Powershell keine Möglichkeit?
TomCig
TomCig 29.03.2023 um 11:24:30 Uhr
Goto Top
Würde mir mittlerweile auch reichen. Wichtig ist eigentlich nur das Endergebnis.
DarkZoneSD
DarkZoneSD 29.03.2023 aktualisiert um 11:49:18 Uhr
Goto Top
Ich habe gerade keine Möglichkeit das leider zu testen aber mit sowas sollte es gehen.

Foreach(Get-ChildItem -Directory -FullName <pfad>){ Get-ChildItem -Directory | Sort-Object { [regex]::Replace($_.Name, '\d+', { $args[0].Value.PadLeft(20) }) }}  

Tut mir leid für die störrische Antwort, ich bin gerade unterwegs, ich hoffe damit lässt sich was anfangen.

Gruß
TomCig
TomCig 29.03.2023 um 13:26:42 Uhr
Goto Top
Geht leider auch nicht..Fehlermeldung in Powershell
TK1987
TK1987 29.03.2023 um 13:32:17 Uhr
Goto Top
Zitat von @TomCig:
Hab ich versucht, jetzt listet er mir nur das 2te Wort des Ordnernames.
Genau das wolltest du doch...
Habe diese Ordnerstruktur :
\A\Ordner Ha
...
In der Ausgabeliste sollte jetzt stehen:
Ha
Also: Aus dem Namen "Ordner Ha" soll nur noch das "Ha" angezeigt werden (also das zweite Wort).
sonst halt Zeile 6 ersetzen durch
>"%OUT%~tmp" (for /d %%A in ("%MAIN%\*") do dir /b /ad "%%A")  
dann wird wieder der komplette name gelistet.

Zitat von @DarkZoneSD:
Gibt es eig. Einen Grund dafür das es in Batch sein muss? ist Powershell keine Möglichkeit?
Zitat von @TomCig:
Würde mir mittlerweile auch reichen. Wichtig ist eigentlich nur das Endergebnis.
$Hauptordner = "D:\Hauptordner"  
$Output = "$ENV:UserProfile\Desktop\Output.lst"  

(Get-ChildItem -Directory "$Hauptordner\*\*").Name | sort | Set-Content $Output  

Gruß Thomas
6247018886
6247018886 29.03.2023 um 13:36:55 Uhr
Goto Top
@echo off
powershell -EP Bypass -C "(Get-ChildItem 'Z:\HauptOrdner\*\*' -Directory | sort Name).Name | set-content -Path $home\Desktop\namen.txt"  

Cheers briggs
TomCig
TomCig 29.03.2023 um 17:52:55 Uhr
Goto Top
Hallo,

@6247018886 und @TK1987

wow, vielen Dank an euch.

@TK1987
jetzt funktioniert es wunderbar, bis auf die Sortierung.
Ich brauche bitte folgende Sortierung:
Inhalt der Ordner A-Z jeweils alphabetisch untereinander. Also erst Inhalt Ordner A, dann Ordner B....
jetzt nimmt er sämtliche Dateien innerhalb A-Z und sortiert gesamt.

LG
Tom
TK1987
Lösung TK1987 29.03.2023 aktualisiert um 18:03:52 Uhr
Goto Top
einfach das "~tmp" aus zeile 6 löschen und die Zeilen 7 & 8 entfernen.

Bzw. für die Powershell-Variante Zeile 4 ersetzen durch
(Get-ChildItem -Directory "$Hauptordner\*\*").Name | Set-Content $Output  

Gruß Thomas
TomCig
TomCig 29.03.2023 aktualisiert um 21:54:57 Uhr
Goto Top
Habe die Liste nochmal genauer gecheckt.
Leider stimmt die Sortierung noch immer nicht. Mixt manche Sachen durcheinander.
Er werden nur ein paar Ordner richtig alphabetisch gelistet.