So extrahieren Sie Dateien mit CMD aus dem Baum

364
tuskiomi

Nehmen wir an, ich habe den folgenden Baum:

├───animals │ │ hippopotamus.txt │ │ lion.txt │ │ │ └───dog │ poodle.txt │ terrier.txt │ └───food ├───fruit │ apple.txt │ orange.txt │ └───vegetables borcolli.txt carrot.txt corn.txt 

Welchen Befehl würde ich verwenden, um ein Verzeichnis zu erstellen, das alle TXT-Dateien enthält, jedoch ohne die Unterordner den Baum im Wesentlichen "verkleinert".

1
Welches Betriebssystem? Welche "Kommandozeile" benutzen Sie? Was hast du bisher versucht? Das Tag "Befehlszeile" kennzeichnet eine Arbeitsweise und allein reicht nicht aus, um uns zu sagen, was Sie verwenden. Mokubai vor 7 Jahren 0
@Mokubai CMD bezieht sich wie im Titel auf Windows CMD.exe. tuskiomi vor 7 Jahren 0
Das ist nicht klar genug. Nächstes Mal fügen Sie bitte ein entsprechendes OS-Tag hinzu. slhck vor 7 Jahren 0
@slhck> Eingabeaufforderung, auch als cmd.exe oder cmd (nach dem Namen der ausführbaren Datei) bekannt, ist der Befehlszeileninterpreter unter Windows. Von: https://en.wikipedia.org/wiki/Cmd.exe tuskiomi vor 7 Jahren 0
Mit @tuskiomi Tags können Benutzer schnell Fragen finden, an denen sie interessiert sind. Durch das Hinzufügen eines betriebssystemspezifischen Tags wird die Antwort auf Ihre Frage für Antwortende und zukünftige Benutzer, die dieselbe Frage stellen, verbessert. Vielen Dank für Ihren Beitrag zu Super User. Twisty Impersonator vor 7 Jahren 1
@tuskiomi Speziell aus diesem Grund gibt es ein `cmd.exe`-Tag. DavidPostill vor 7 Jahren 0

2 Antworten auf die Frage

3
Damian T.

Antworten

Angenommen, Sie haben ein Zielverzeichnis (C: \ Target) und alle TXT-Dateien befinden sich unter dem Verzeichnis C: \ Tree. Mit dem folgenden Befehl erhalten Sie eine Liste aller TXT-Dateien und kopieren diese in die gewünschten Dateien Ziel:

for /F "delims=" %a in ('dir /s /b "C:\Tree\*.txt" ') do (copy "%a" "C:\Target") 

Ich setze doppelte Anführungszeichen um Parameter, die Leerzeichen enthalten können.

Erläuterung

for /F 

Führt einen Text für die Schleifenanalyse aus. Standardmäßig werden Token für Leerzeichen in die Variablen% a,% b,% c usw. aufgeteilt. Da wir dieses Verhalten nicht wünschen, habe ich Folgendes angegeben:

"delims=" 

Was bedeutet keine Trennzeichen. % a ist die Variable, die jede Textzeile aus der Ausgabe unseres Befehls enthält. Der Befehl, den ich verwendete, war:

dir /s /b "C:\Tree\*.txt" 

Dies führt eine Verzeichnisliste aller Dateien aus, die mit * .txt unter dem Ordner C: \ Tree übereinstimmen. Das Flag / s führt eine rekursive Suche in allen Unterverzeichnissen / Unterordnern durch. Das Flag / b gibt die Auflistung in einem "bloßen" Format aus, das im Grunde nur die Datei und den Pfad aufführt. Die Ausgabe sieht folgendermaßen aus:

C:\Tree\animals\hippopotamus.txt C:\Tree\animals\lion.txt C:\Tree\animals\dog\poodle.txt C:\Tree\animals\dog\terrier.txt C:\Tree\food\fruit\apple.txt C:\Tree\food\fruit\orange.txt C:\Tree\food\vegetables\borcolli.txt C:\Tree\food\vegetables\carrot.txt C:\Tree\food\vegetables\corn.txt 

Und natürlich:

copy "%a" "C:\Target" 

Kopiert die durch die Variable% a angegebene Datei in das Verzeichnis C: \ Target. Die for-Schleife führt im Wesentlichen die folgenden Befehle aus:

copy "C:\Tree\animals\hippopotamus.txt" "C:\Target" copy "C:\Tree\animals\lion.txt" "C:\Target" copy "C:\Tree\animals\dog\poodle.txt" "C:\Target" copy "C:\Tree\animals\dog\terrier.txt" "C:\Target" copy "C:\Tree\food\fruit\apple.txt" "C:\Target" copy "C:\Tree\food\fruit\orange.txt" "C:\Target" copy "C:\Tree\food\vegetables\borcolli.txt" "C:\Target" copy "C:\Tree\food\vegetables\carrot.txt" "C:\Target" copy "C:\Tree\food\vegetables\corn.txt" "C:\Target" 

Weitere Hilfe zu DIR-Optionen oder FOR-Schleifen in der Windows-Eingabeaufforderung (CMD) können Sie help diroder eingeben help for. Achtung, die FOR-Schleife-Hilfeseite ist recht langwierig. ;)

Bitte lassen Sie mich wissen, wenn Ihre Frage dadurch nicht vollständig beantwortet wird. Wenn dies der Fall ist, sollten Sie dies als Antwort akzeptieren. :) Damian T. vor 7 Jahren 0
Dies ist definitiv die richtige Antwort. Dies ist jedoch eines der Dinge, die ich in PowerShell gerne mache, weil es sich "sauberer" anfühlt ... Beispiel: get-childitem -recurse -include * .txt | copy-item -destination C: \ Ziel BrianC vor 7 Jahren 0
1
SimonS

Eine PowerShell-Lösung:

mkdir C:\AllTxt ; gci C:\Install *.txt -Recurse | copy-item -Destination C:\AllTxt -Force 
  • mkdirerstellt ein neues Verzeichnis wie C:\AllTxt
  • gciholt alle txt-Dateien C:\installrekursiv in (das oberste Verzeichnis Ihrer Baumstruktur)
  • copy-item kopiert die Dateien an das Ziel