batch Verschiebt alle Dateien in mehreren hundert Ordnern in einen Ordner

8

Ich habe ein kleines Problem. Ich bin nicht super fließend in Batch Scripting, aber ich versuche, besser zu werden. Ich versuche, bei meinem aktuellen Job ein Skript zu erstellen, mit dem alle Dateien im letzten Unterverzeichnis eines übergeordneten Elements in ein Verzeichnis verschoben werden können.

Bewegte Bildsequenzen, die mit einem überflüssigen Unterverzeichnis geliefert wurden, müssen in einem Unterverzeichnis für den Effekt-Workflow

nach oben verschoben werden

im Wesentlichen ich bin geliefert 100s Bildsequenzen als:

Episode / Footage / Aufnahme / Auflösung / shot.0000001.dpx

Ich würde ein Stapel-Skript lieben, das ich in den "Footage" -Ordner verschieben könnte, der die darunter liegenden Shot-Verzeichnisse analysiert und die Bildsequenzen aus dem Auflösungsordner verschiebt und sie direkt in den Shot-Ordner legt, damit die Struktur mehr aussieht so:

Episode / Footage / Schuss / Schuss.0000001.dpx

Dieser Stapel müsste für viele Instanzen wiederverwendet werden und einfach robust genug sein, um wiederverwendbar zu sein, unabhängig davon, was die Erweiterungen der Bildsequenzen sind oder die Benennungsstruktur der Unterordner.

    
user2836139 01.10.2013, 18:56
quelle

3 Antworten

4
%Vor%


Das * kann durch * ersetzt werden. * (keine Leerzeichen), um nur Dateien zu erfassen.
Verwenden Sie% anstelle von %% für die Verwendung in der Befehlszeile Dies wird von jedem Verzeichnis unter Footage genommen. lösche die erste for-Schleife und ersetze alle Treffer von %% i mit shot, um nur von dort zu greifen.

    
nephi12 01.10.2013, 19:55
quelle
0
%Vor%

Oder für mehr Fanciness:

%Vor%

Dies wird Sie fragen, was der Pfad ist (Dies ist Episoden / Footage / in Ihrem Beispiel gedreht), dann finden Sie alle Dateien in diesem Pfad und alle darin enthaltenen Dateien und legen Sie sie alle im Pfad. Sie können dies auch ändern, wenn Sie die Dateien nicht an einer anderen Stelle in den gewünschten Pfad einfügen möchten:

%Vor%

dazwischen: lese file_path und mv ... und ändern:

%Vor%

zu:

%Vor%     
Cnorwood7641 01.10.2013 19:06
quelle
0

Es ist wirklich nicht nötig, so viel Ärger zu machen Mit Ausnahme der PUSHD- und POPD-Befehle kann das Ganze wie bei nephi12 in einer Zeile platziert werden.

Ich setze alles aus Gründen der Klarheit auf separate Zeilen, gebe aber später zwei Beispiele dafür in einer Zeile an.

%Vor%

Der obige Code verschiebt den aktuellen Verzeichnisnamen in einen Stapel und ändert die Verzeichnisse in Footage. Dann nimmt der Befehl For /d alle (falls vorhanden) der Unterverzeichnisse von Footage und führt sie einzeln nacheinander in den Befehl MOVE und dann in den Befehl Verzeichnis entfernen ein.

Der Befehl MOVE /s verschiebt alle Dateien im Verzeichnis %% d (einschließlich aller in Unterordnern) um eine Ebene nach oben. Als nächstes löscht der Befehl RD /y automatisch die jetzt leeren Verzeichnisse oder verursacht einen Soft-Fehler, wenn sie nicht leer sind.

Der letzte Befehl gibt das Arbeitsverzeichnis an den ursprünglichen Speicherort zurück, POP den Pfad vom Stapel.

In einer Zeile, ohne die Befehle PUSHD und POPD und die Verzeichnisbereinigung, sieht das so aus:

Einzeilige Lösung:

%Vor%

Einzeilige Lösung mit Bereinigung:

Um die Bereinigung einzubeziehen, fügen Sie einfach den Befehl und% && nach dem Befehl move und vor dem RD hinzu, etwa:

%Vor%

Warum Ich habe getan, was ich getan habe.

Der schnellste Weg, um eine ganze Reihe von Dateien zu verschieben, ist nicht zu sagen, wie und wohin man jede Datei verschiebt, sondern Wildcards zu verwenden, die es move erlauben, selbst herauszufinden, wohin sie gehen sollen Sie. Anstatt also zu sagen, dass man eine Datei nach der anderen verschieben soll, gebe ich ihr Wildcards, wodurch Move am schnellsten arbeiten kann. Ich füttere also nur die einzelnen Quell- und Zielverzeichnisse und sage "ALLE Dateien von hier nach dort kopieren".

Ein Satz von Klammern MOVE kann enthalten, was der Interpreter als eine einzelne Codezeile betrachtet. Das verursacht eine ganze Reihe neuer Probleme, aber es erlaubt eine spezielle Variable wie %% d auf mehreren Zeilen Code zu existieren. Das habe ich oben gemacht. Später habe ich einen anderen Satz Klammern verwendet, um dem Befehlsinterpreter zu zeigen, was Teil einer einzelnen Zeile innerhalb einer (...) -Anweisung ist und was nicht.

Ich habe auch ein bisschen alte DOS-Kürzel benutzt, um ein Eltern-Verzeichnis anzugeben, FOR , was mir erlaubt, den genauen Pfad von etwas nicht zu kennen und trotzdem Dinge in seinem Elternteil zu manipulieren. Als ein Beispiel ist .. C:\WINDOWS\.. und C:\ ist C:\WINDOWS\SYSTEM32\.. .

Sie haben vielleicht bemerkt, dass ich auch die Dateiangabe C:\WINDOWS\ verwendet habe. Das ist wahrscheinlich unnötig, aber ich habe genug Probleme ohne sie, dass ich es benutze. Es macht nur . klar, dass wir diese Dateien in einen Ordner und nicht in eine Datei verschieben. Und, ja, MOVE verschiebt gerne hunderte von Dateien übereinander und ruiniert sie alle bis auf die letzte. Sie können sich vorstellen, wie ich das MOVE umarmen konnte.

Mit . können Sie mehrere Befehle oder Programme auf eine einzige Codezeile zeichnen und den RD an das Ende der Zeile heften und trotzdem auf die speziellen Variablen zugreifen, die & Befehl erstellt.

Also, wenn Sie jetzt aufpassen würden, hätten Sie bemerkt, dass mein zweiter Satz ein Fluch war. Es gibt nichts, was Sie davon abhält, ein FOR und ein PUSHD & auf den Anfang und das Ende dieser Zeile zu heften.

    
James K 02.10.2013 02:16
quelle

Tags und Links