So erstellen Sie rekursiv Unterordner in jedem Ordner eines Verzeichnisses in CMD

2507
amallard

Lassen Sie uns sagen, dass ich ein Verzeichnis mit dem Namen haben Grandparent
In diesem Verzeichnis mehrere andere Ordner sind Parent 1, Parent 2etc .. Mein Ziel, einen neuen Ordner zu erstellen ist, Childinnerhalb jeder der ParentOrdner.

Zum Beispiel was ich habe:

Grandparent/ Parent1/ Parent2/ ... ... ParentX/ 

Was ich möchte:

Grandparent/ Parent1/ Child/ Parent2/ Child/ ... ... ParentX/ Child/ 

Gibt es eine Möglichkeit, dies in CMD zu tun? (Hinweis: Ich kann weder Powershell noch ein anderes praktisches Tool herunterladen, das mir das Leben leichter macht. Ich stecke mit der Standard-Windows-Eingabeaufforderung fest.)

Aktualisieren

Nach den Links in den Kommentaren habe ich Folgendes versucht:

for /r %%a in (.) do ( rem enter the directory pushd %%a echo In Directory: mkdir testFolder cd rem leave the directory popd ) 

Dadurch wird jedoch der Ordner testFolderin jedem neu erstellten Ordner erstellt:

Grandparent/ Parent1/ Child/ Child/ Child/ ... Parent2/ Child/ Child/ Child/ ... ... ... ParentX/ Child/ Child/ Child/ ... Child/ Child/ Child/ ... 
1
Ja, aber bitte beachten Sie, dass https://superuser.com kein kostenloser Skript- / Code-Schreibservice ist. Wenn Sie uns sagen, was Sie bisher versucht haben (einschließlich der Skripts / des Codes, die Sie bereits verwenden) und wo Sie stecken bleiben, können wir versuchen, bei bestimmten Problemen zu helfen. Sie sollten auch lesen [Wie kann ich eine gute Frage stellen?] (Https://superuser.com/help/how-to-ask). DavidPostill vor 7 Jahren 0
[Verzeichnisse in einem Verzeichnisbaum rekursiv besuchen] (http://stackoverflow.com/documentation/batch-file/3695/for-loops-in-batch-files/12871/recursively-visit-directories-in-a-directory- Baum # t = 201703251426285361546) DavidPostill vor 7 Jahren 0
Was hast du versucht? Zeigen Sie Ihren Code und erklären Sie, was damit passiert ist yass vor 7 Jahren 0
@DavidPostill Danke für den Link, das ist ein großartiger Ort, um zu beginnen! amallard vor 7 Jahren 0
@yass Ich habe meinen Versuch und das Ergebnis aktualisiert amallard vor 7 Jahren 0

1 Antwort auf die Frage

1
DavidPostill

Dadurch wird jedoch in jedem neu erstellten Ordner der Ordner testFolder erstellt

Dies liegt daran, dass der for /rBefehl die Liste der zu aktualisierenden Dateien jedes Mal aktualisiert, wenn Sie ein neues Verzeichnis erstellen. Dies ist wirklich nur nützlich, wenn Sie eine feste Liste von Verzeichnissen aufrufen möchten.

Hier ist eine Batchdatei (test.cmd), die das tut, was Sie wollen. Legen Sie es in das GrandparentVerzeichnis.

test.cmd:

@echo off setlocal for /f "usebackq tokens=*" %%a in (`dir /b /a:d`) do ( rem enter the directory pushd %%a echo In Directory: %%a md child rem leave the directory popd ) endlocal 

Anmerkungen:

  • dir /b /a:d einmal ausgewertet, daher ist die Liste der Verzeichnisse festgelegt
  • for /f durchläuft diese feste Liste genau einmal.

Beispielausgabe:

> test In Directory: Documentation In Directory: subdir In Directory: test In Directory: test with space In Directory: test1  > dir /b /a:d /s child F:\test\Documentation\child F:\test\subdir\child F:\test\test\child F:\test\test with space\child F:\test\test1\child 

Lesen Sie weiter

  • Ein AZ-Index der Windows-CMD-Befehlszeile - Eine hervorragende Referenz für alles, was mit Windows-Cmd-Zeilen in Verbindung steht.
  • dir - Zeigt eine Liste von Dateien und Unterordnern an.
  • for / f - Schleifenbefehl gegen die Ergebnisse eines anderen Befehls.
  • md - Verzeichnis erstellen - Erstellt einen neuen Ordner.
  • pushd - Ändert das aktuelle Verzeichnis / den Ordner und speichert den vorherigen Ordner / Pfad zur Verwendung durch den POPD-Befehl.
  • popd - Wechseln Sie in das Verzeichnis, das zuletzt vom Befehl PUSHD gespeichert wurde.