Batchdatei für das Erstellen eines Unterordner bei Vorhandensein eines bestimmten Ordnernamens
Hallo zusammen ,
ich suche nach einer Möglichkeit, ein freigegebenes Laufwerk nach einem bestimmten Ordnernamen ("Schriftverkehr") zu durchsuchen, und dann im folgenden in diesem Ordner einen weiteren Unterordner anzulegen. Dieser Ordner "Schriftverkehr" kommt in der Struktur mehrere hundert mal vor.
Das müsste doch eigentlich mit einer Batchdatei funktionieren ?
Darin bin ich wirklich nicht bewandert ….
Um keine Missverständnisse aufkommen zu lassen : Wir reden hier von einigen 10000 Unterordnern …….
(sonst hätt ich das längst per Hand gemacht.)
Vielleicht könnte mir da jemand weiterhelfen ??
Vielen Dank schon mal für die Aufmerksamkeit !!
K.
ich suche nach einer Möglichkeit, ein freigegebenes Laufwerk nach einem bestimmten Ordnernamen ("Schriftverkehr") zu durchsuchen, und dann im folgenden in diesem Ordner einen weiteren Unterordner anzulegen. Dieser Ordner "Schriftverkehr" kommt in der Struktur mehrere hundert mal vor.
Das müsste doch eigentlich mit einer Batchdatei funktionieren ?
Darin bin ich wirklich nicht bewandert ….
Um keine Missverständnisse aufkommen zu lassen : Wir reden hier von einigen 10000 Unterordnern …….
(sonst hätt ich das längst per Hand gemacht.)
Vielleicht könnte mir da jemand weiterhelfen ??
Vielen Dank schon mal für die Aufmerksamkeit !!
K.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 420303
Url: https://administrator.de/forum/batchdatei-fuer-das-erstellen-eines-unterordner-bei-vorhandensein-eines-bestimmten-ordnernamens-420303.html
Ausgedruckt am: 22.04.2025 um 06:04 Uhr
15 Kommentare
Neuester Kommentar
Hallo KarstenPa,
nur als Ansatz:
Wenn das freigegebenes Laufwerk per Laufwerksbuchstaben [z.B. X:] verbunden ist, dann kannst Du auf das Laufwerk wechseln und nach dem Ordner suchen lassen.
Das kannst Du in einer For-Schleife einsetzen und darin die Unterordner erstellen lassen.
Gruß Frank
nur als Ansatz:
Wenn das freigegebenes Laufwerk per Laufwerksbuchstaben [z.B. X:] verbunden ist, dann kannst Du auf das Laufwerk wechseln und nach dem Ordner suchen lassen.
x:
dir /ad /b /s Schriftverkehr
Das kannst Du in einer For-Schleife einsetzen und darin die Unterordner erstellen lassen.
Gruß Frank
Hallo,
Oder sind die Daten nur auf ein NAS oder so zu finden?
Gruß,
Peter
Zitat von @KarstenPa:
und dann im folgenden in diesem Ordner einen weiteren Unterordner anzulegen. Dieser Ordner "Schriftverkehr" kommt in der Struktur mehrere hundert mal vor.
Soll der neu zu schaffende Unterordner nur einmal angelegt werden oder mehrere hundert mal?und dann im folgenden in diesem Ordner einen weiteren Unterordner anzulegen. Dieser Ordner "Schriftverkehr" kommt in der Struktur mehrere hundert mal vor.
Das müsste doch eigentlich mit einer Batchdatei funktionieren ?
Darf es auch evtl. Powershell sein?Darin bin ich wirklich nicht bewandert …. 
Deshalb sollen wir deine Arbeit machen?Um keine Missverständnisse aufkommen zu lassen : Wir reden hier von einigen 10000 Unterordnern
Vielleicht könnte mir da jemand weiterhelfen ??
Was ist das Dateisystem bzw.OS?Vielleicht könnte mir da jemand weiterhelfen ??
Oder sind die Daten nur auf ein NAS oder so zu finden?
Gruß,
Peter
Hallo,
Warum etwas suchen wenn es das schon gibt? Damit nicht das rad 2 mal erfindet.
https://www.google.com/search?q=batch+finde+ordner+site%3Aadministrator. ... oder das Suchfenster oben rechts bemühen.

Gruß,
Peter
Warum etwas suchen wenn es das schon gibt? Damit nicht das rad 2 mal erfindet.
https://www.google.com/search?q=batch+finde+ordner+site%3Aadministrator. ... oder das Suchfenster oben rechts bemühen.
Jede Lösung ist mir recht
(auch PowerShell)
Gruß,
Peter

Das müsste doch eigentlich mit einer Batchdatei funktionieren ?
Naturalemente ...Batch
for /f "delims=" %%a in ('dir /b /s /ad "X:\Schriftverkehr"') do md "%%a\Unterordner"
gci x: -Directory -Recurse -Include "Schriftverkehr" | %{md "$($_.Fullname)\Unterordner" -Force -Verbose}
Zitat von @erikro:
mit der Powershell wie so oft ein Einzeiler, den Du im Stammverzeichnis der Ordner ausführst, in denen das passieren soll:
Das hat aber ein paar Fehler und performance issues ...mit der Powershell wie so oft ein Einzeiler, den Du im Stammverzeichnis der Ordner ausführst, in denen das passieren soll:
gci -r | %{if($_.Name -eq "Schriftverkehr") {new-item -path "$_\unterordner" -itemtype directory}}
- Findet auch Dateien mit dem Namen statt nur Ordner
- Der Ordner wird nicht im jeweiligen Unterordner erstellt sondern im aktuellen Verzeichnis in einem Ordner Schriftverkehr (statt $_ solltest du hier "$($_.Fullname)\unterordner" nutzen)
- Ist das Konstrukt performancetechnisch ineffektiv da es alle Ordner und sogar Dateien durchläuft und dann auch noch das IF-Konstrukt durchläuft und die Ordner nicht vorher schon im Get-Childitem Befehl ausfiltert.
Moin,
Da hast Du recht. Da muss noch ein -directory dahinter.
Mist! Falsche Testversion kopiert.
Da hast Du natürlich auch recht.
Naja. Ich würde sogar noch weiter gehen und mit test-path prüfen, ob der zu erstellende Ordner schon existiert. Ob das dann zwei Sekunden länger dauert oder nicht, wäre mir egal.
Liebe Grüße
Erik
Zitat von @138810:
Zitat von @erikro:
mit der Powershell wie so oft ein Einzeiler, den Du im Stammverzeichnis der Ordner ausführst, in denen das passieren soll:
Das hat aber ein paar Fehler und performance issues ...mit der Powershell wie so oft ein Einzeiler, den Du im Stammverzeichnis der Ordner ausführst, in denen das passieren soll:
gci -r | %{if($_.Name -eq "Schriftverkehr") {new-item -path "$_\unterordner" -itemtype directory}}
- Findet auch Dateien mit dem Namen statt nur Ordner
Da hast Du recht. Da muss noch ein -directory dahinter.
# Der Ordner wird nicht im jeweiligen Unterordner erstellt sondern im aktuellen Verzeichnis in einem Ordner Schriftverkehr (statt $_ solltest du hier "$($_.Fullname)\unterordner" nutzen)
Mist! Falsche Testversion kopiert.
# Ist das Konstrukt performancetechnisch ineffektiv da es alle Ordner und sogar Dateien durchläuft und dann auch noch das IF-Konstrukt durchläuft und die Ordner nicht vorher schon im Get-Childitem Befehl ausfiltert.
Naja. Ich würde sogar noch weiter gehen und mit test-path prüfen, ob der zu erstellende Ordner schon existiert. Ob das dann zwei Sekunden länger dauert oder nicht, wäre mir egal.
Liebe Grüße
Erik
Hallo freesolo,
Der Laufwerksbuchstabe darf nicht beim
Gruß Frank
Zitat von @138810:
das hat noch einen Schönheitsfehler.for /f "delims=" %%a in ('dir /b /s /ad "X:\Schriftverkehr"') do md "%%a\Unterordner">
Der Laufwerksbuchstabe darf nicht beim
dir
dabei sein, sonst würde lediglich X:\Schriftverkehr
gesucht und durchsucht werden und nicht alle Unterordner namens "Schriftverkehr" auf X:
gesucht werden.cd /d x:\
for /f "delims=" %%a in ('dir /b /s /ad "Schriftverkehr"') do md "%%a\Unterordner">
Gruß Frank

Zitat von @Pedant:
das hat noch einen Schönheitsfehler.
Der Laufwerksbuchstabe darf nicht beim
das hat noch einen Schönheitsfehler.
Der Laufwerksbuchstabe darf nicht beim
dir
dabei sein, sonst würde lediglich X:\Schriftverkehr
gesucht und durchsucht werden und nicht alle Unterordner namens "Schriftverkehr" auf X:
gesucht werden.Sorry aber das ist absoluter Lötzinn.
Mit der /S option wird der letzte Name rekursiv gesucht.
Ausgabe aus meinem Testverzeichnis
> dir q:\test\2018\13 /B /S /AD
q:\test\2018\04\13
q:\test\2018\05\13
q:\test\2018\06\13
q:\test\2018\07\13
q:\test\2018\08\13
q:\test\2018\11\13
q:\test\2018\12\13
Gruß
LotPings
Hallo,
s.u.
Gruß,
Peter
Zitat von @77559:
Sorry aber das ist absoluter Lötzinn.
Nö, da hat er recht.Sorry aber das ist absoluter Lötzinn.
Mit der /S option wird der letzte Name rekursiv gesucht.
Ja, das werden sie, aber alle nur im Ausgangspfad. Siehe deine Ausgabe. Da ist nichts davon ausserhalb C:\test\2018\13\Ausgabe aus meinem Testverzeichnis
Glaub ich nichtdir q:\test\2018\13 /B /S /AD
Passt nämlich nicht zu deiner Ausgabe. Du lässt in q:\test\2018\13\ suchen, zeigst uns aber die Ausgabe von q:\test\2018\. Wie sonst kommen da sonst Verzeichnisse wie q:\test\2018\04 usw. zustande?Gruß,
Peter
Hallo,
zuerst war ich auch "empört" und was ich schrieb funktioniert einwandfrei, aber LotPings' Beispiel funktioniert interessanterweise auch und dass obwohl der Pfad c:\test\2018\13 nicht existiert.
Ich habe diese Struktur angelegt:
Den Ordner
=> Datei nicht gefunden
=> gibt tatsächlich die gesamte Liste aus, die dem Muster
Lege ich zusätzlich noch diese Struktur an:
und setze diesen Befehl ab:
werden beide Strukturen gelistet.
Keine Ahnung was sich der dir-Befehl dabei denkt, die Pfadangabe zu splitten und "C:\" als Ausgansverzeichnis zu nehmen und "13" als Suchzeichenfolge.
Die Ausgabe von
Gruß Frank
zuerst war ich auch "empört" und was ich schrieb funktioniert einwandfrei, aber LotPings' Beispiel funktioniert interessanterweise auch und dass obwohl der Pfad c:\test\2018\13 nicht existiert.
Ich habe diese Struktur angelegt:
c:\test\2018\04\13c:\test\2018\05\13c:\test\2018\06\13c:\test\2018\07\13c:\test\2018\08\13c:\test\2018\11\13c:\test\2018\12\13
Den Ordner
c:\test\2018\13
habe ich nicht angelegt.dir c:\test\2018\13 /b /ad
(ohne /s)=> Datei nicht gefunden
D:\>dir c:\test\2018\13 /b /s /ad
=> gibt tatsächlich die gesamte Liste aus, die dem Muster
c:\test\2018\...\13
entspricht:Lege ich zusätzlich noch diese Struktur an:
c:\brot\2018\04\13c:\brot\2018\05\13c:\brot\2018\06\13c:\brot\2018\07\13c:\brot\2018\08\13c:\brot\2018\11\13c:\brot\2018\12\13
und setze diesen Befehl ab:
dir c:\13 /b /s /ad
werden beide Strukturen gelistet.
Keine Ahnung was sich der dir-Befehl dabei denkt, die Pfadangabe zu splitten und "C:\" als Ausgansverzeichnis zu nehmen und "13" als Suchzeichenfolge.
Die Ausgabe von
dir c:\13 /b /s /ad
und dir 13 /b /s /ad
ist identisch, wobei Letzterer erfordert, dass er C:\ als Arbeitsverzeichnis hat und Ersterer nicht.Gruß Frank
Tatsächlich. Man glaubt es kaum. dir kann sowas wie regex. 
P:\test>dir 2018 /b
02
03
04
01
P:\test>dir 2018\13 /s /ad /b
P:\test\2018\02\13
P:\test\2018\03\13
P:\test\2018\04\13
P:\test\2018\01\13
P:\test>mkdir 2018\04\13\13
P:\test>dir 2018\13 /s /ad /b
P:\test\2018\02\13
P:\test\2018\03\13
P:\test\2018\04\13
P:\test\2018\04\13\13
P:\test\2018\01\13

Zitat von @Pedant:
Der Laufwerksbuchstabe darf nicht beim
Nö, das macht hier nichts, das /s sorgt dafür das auch das geht ! Hätte ich hier ja nicht gepostet wenn es nicht so wäre! Mach ich schon ewig und drei Tage so.Zitat von @138810:
das hat noch einen Schönheitsfehler.for /f "delims=" %%a in ('dir /b /s /ad "X:\Schriftverkehr"') do md "%%a\Unterordner">
Der Laufwerksbuchstabe darf nicht beim
dir
dabei sein, sonst würde lediglich X:\Schriftverkehr
gesucht und durchsucht werden und nicht alle Unterordner namens "Schriftverkehr" auf X:
gesucht werden.
Hallo freesolo,
Andere Male probiert man zwei oder drei Varianten aus, findet dabei die richtige, kopiert dann aber versehentlich die falsche in seine Antwort.
Eines habe ich noch festgestellt:
Deine "merkwürdige" Syntax scheitert, wenn der Ordner
In dem Fall zeigt er lediglich - und so wie ich es generell erwarten würde - die Unterordner von
Warum bei Deiner Syntax die Struktur von
Die normale Syntax scheitert aber auch (in umgekehrter Weise).
Wenn
Das halte ich ebenfalls für einen Bug.
Eigentlich sollte der Befehlt bedeuten:
Suche im aktuellen Verzeichnis des aktuellen Laufwerks nach Verzeichnissen mit dem Namen "Schriftverkehr" und zeige sie an und beziehe dabei die gesamte Unterstruktur des aktuellen Verzeichnisses des aktuellen Laufwerks mit ein.
Noch eine weitere Sache mit einem anderen Beispielordner:
Davon ausgehend dass (wie üblich)
versus
Jetzt weiß ich wenigstens, wie ich dieses merkwürdig Verhalten unterdrücken kann.
Ich möchte Dir noch erklären, warum ich Deine Syntax als merkwürdig und als Bug bezeichne:
Stell Dir vor der rd-Befehlt würde sich ebenso verhalten, was er glücklicherweise nicht tut.
Normal ist...
So kennt man's und so ist es auch gut.
Merkwürdig wäre...
So würde man es nicht erwarten und so will man es auch nicht haben.
Merkwürdig und Bug oder nicht:
In Bezug auf KarstenPas Aufgabenstellung sind beide Syntaxvarianten funktionsgleich.
Deine Lösung funktioniert für ihn und er sollte seine Frage als gelöst markieren.
Gruß Frank
Zitat von @138810:
Hätte ich hier ja nicht gepostet wenn es nicht so wäre!
Gelegentlich schreibt man eine Lösung für eine einfache Aufgabe ohne sie getestet zu haben und schreibt einen kleinen Syntaxfehler mit rein.Hätte ich hier ja nicht gepostet wenn es nicht so wäre!
Andere Male probiert man zwei oder drei Varianten aus, findet dabei die richtige, kopiert dann aber versehentlich die falsche in seine Antwort.
Zitat von @138810:
Nö, das macht hier nichts, das /s sorgt dafür, dass auch das geht
Ja, darauf hatte LotPings schon hingewiesen und ich hatte es daraufhin ausprobiert und zu meiner Überraschung hat es funktioniert.Nö, das macht hier nichts, das /s sorgt dafür, dass auch das geht
Eines habe ich noch festgestellt:
Deine "merkwürdige" Syntax scheitert, wenn der Ordner
X:\Schriftverkehr
existieren sollte.In dem Fall zeigt er lediglich - und so wie ich es generell erwarten würde - die Unterordner von
C:\Schriftverkehr
an oder eben nichts, falls C:\Schriftverkehr
keine Unterordner hat.C:\> md C:\Schriftverkehr
C:\> dir /b /s /ad X:\Schriftverkehr
=> X:\Schriftverkehr\Unterordner1
=> X:\Schriftverkehr\Unterordner2
X:\
durchsucht wird, wenn X:\Schriftverkehr
nicht vorhanden ist, ist mir echt unklar und ich halte es für einen Bug.Die normale Syntax scheitert aber auch (in umgekehrter Weise).
Wenn
Schriftverkehr
in erster Ebene von X:\
existiert, so wird nicht, wie eigentlich angegeben, die Struktur von X:\
durchsucht, sondern lediglich die Struktur von X:\Schriftverkehr
C:\> cd /d X:\
X:\> md Schriftverkehr
X:\> dir /b /s /ad Schriftverkehr
=> X:\Schriftverkehr\Unterordner1
=> X:\Schriftverkehr\Unterordner2
Eigentlich sollte der Befehlt bedeuten:
Suche im aktuellen Verzeichnis des aktuellen Laufwerks nach Verzeichnissen mit dem Namen "Schriftverkehr" und zeige sie an und beziehe dabei die gesamte Unterstruktur des aktuellen Verzeichnisses des aktuellen Laufwerks mit ein.
Noch eine weitere Sache mit einem anderen Beispielordner:
Davon ausgehend dass (wie üblich)
C:\System32
nicht existiert...dir /b /s /ad C:\System32
=> C:\Windows\System32
dir /b /s /ad C:\System32\
=> Das System kann die angegebene Datei nicht finden.
Ich möchte Dir noch erklären, warum ich Deine Syntax als merkwürdig und als Bug bezeichne:
Stell Dir vor der rd-Befehlt würde sich ebenso verhalten, was er glücklicherweise nicht tut.
Normal ist...
md C:\System32
=> der Ordner C:\System32 wird erzeugt
rd /q /s C:\System32
=> der Ordner C:\System32 wird ohne Nachfrage geleert und entfernt
rd /q /s C:\System32
=> Das System kann die angegebene Datei nicht finden. (ist auch kein Wunder, der Ordner wurde ja zuvor gelöscht)
Merkwürdig wäre...
md C:\System32
=> der Ordner C:\System32 wird erzeugt
rd /q /s C:\System32
=> der Ordner C:\System32 wird ohne Nachfrage geleert und entfernt
rd /q /s C:\System32
=> Der Ordner C:\System32 existiert nicht, dann suche ich halt in der Struktur von C:\ nach System32-Ordnern.
=> C:\Windows\System32 wird ohne Nachfrage geleert und entfernt
Zitat von @138810:
Mach ich schon ewig und drei Tage so.
Wie und wann kamst Du denn darauf so eine kontraintuitive Syntax überhaupt auszuprobieren?Mach ich schon ewig und drei Tage so.
Merkwürdig und Bug oder nicht:
In Bezug auf KarstenPas Aufgabenstellung sind beide Syntaxvarianten funktionsgleich.
Deine Lösung funktioniert für ihn und er sollte seine Frage als gelöst markieren.
Gruß Frank