2017-08-19 4 views
1

ich ein schönes Skript bei https://superuser.com/questions/999922/move-all-files-from-multiple-subfolders-into-the-parent-folder gefundenin den übergeordneten Ordner

Das Hauptproblem ist, ich ein Skript benötigen, die für jeden Unterordner funktioniert und verschiebt alle Dateien in den Ordner oben vom Flacroot Verzeichnis Ausgangspunkt. Zum Beispiel Album1 -> Re-Encode, alle Inhalte von Re-Encode sollten in Album1 und das für jedes Album-Verzeichnis verschoben werden.

@echo off 

FOR /R "C:\Source Folder" %%i IN (*.png) DO MOVE "%i" "C:\Staging Folder" 

Dieses Skript kann nicht für jeden Unterordner ausgeführt werden. Hat jemand eine Idee, wie das gelöst werden könnte?

Von:

|Flacroot 
| |Album1 
| |  |Re-Encode 
| |  |   |*.* 
|Flacroot 
| |Album2 
| |  |Re-Encode 
| |  |   |*.* 
|Flacroot 
| |Album3 
| |  |Re-Encode 
| |  |   |*.* 

zu:

|Flacroot 
| |Album1 
| |  |Re-Encode, *.* 
|Flacroot 
| |Album2 
| |  |Re-Encode, *.* 
|Flacroot 
| |Album3 
| |  |Re-Encode, *.* 

Originale und bearbeitete Struktur:

D:. 
│ cuerenamer.bat 
│ 
└───!Onmyōza 
    │ 
    ├───Onmyo-Za - Welter of Hundred Demons 
    │ │ Front.jpg 
    │ │ 
    │ ├───Re-Encode 
    │ │  01. Song1.flac 
    │ │  02. Song2.flac 
    │ │ 
    │ └───Scans 
    │   02.jpg 
    │   03.jpg 
    │ 
    │───Onmyo-Za - Ninja Magic Story of Voluptuous Flower 
    │ │ Front.jpg 
    │ │ 
    │ ├───Re-Encode 
    │ │  01. Song1.flac 
    │ │  02. Song2.flac 
    │ │ 
    │ └───Scans 
    │   02.jpg 
    │   03.jpg 
    │   04.jpg 

Oh und wichtig die Scans Ordner ausgeschlossen werden sollten und sollten nicht berührt werden. Ich hoffe, diese Struktur erklärt das gut genug.

Das Skript sollte im übergeordneten Ordner !Onmyōza ausgeführt werden und verschieben Sie die Dateien wie beschrieben.

Vielen Dank!

+0

werfen Sie einen Blick auf diese Antwort, scheint zu sein, was Sie suchen. https://superuser.com/questions/1146686/move-all-files-within-subfolders-to-parent-folder –

+0

Anstatt einen schönen Baum zu malen, benutze 'tree.exe/F .' um den echten Baum zu zeigen, wenn nötig verkürzt oder neutralisiert. Wenn ich richtig verstehe, willst du alle Dateien aus den Unterordnern 'Re-Encode' um eine Stufe nach oben verschieben? – LotPings

+0

Es wäre auch hilfreich, wenn Ihre Befehlszeilennamen mit den Informationen in der Baumstruktur übereinstimmen würden. Bitte [bearbeiten] (https://stackoverflow.com/posts/45769903/edit) Ihre Frage mit verständlicheren Informationen, _Fragen Sie keine Fragen Updates als Kommentare_. – Compo

Antwort

0

Diese Aufgabe ist einfach, mit dem folgende Batch Code zu erreichen:

@echo off 
for /D %%I in ("%~dp0*") do (
    if exist "%%I\Re-Encode\*" (
     move /Y "%%I\Re-Encode\*" "%%I\" 2>nul 
     rd "%%I\Re-Encode" 2>nul 
    ) 
) 

%~dp0 verweist auf das Laufwerk und den Pfad der Batchdatei, die in einen Verzeichnispfad erweitert wird immer mit einem Backslash.

Befehl FÜR mit Option /D sucht Verzeichnisse nicht versteckt das Muster * im Verzeichnis der Batchdatei übereinstimmen. Das bedeutet, FüR verarbeitet die Verzeichnisse Album1, Album2 und Album3 mit Batch-Datei im Verzeichnis ist Flacroot oder Onmyo-Za - Welter of Hundred Demons und Onmyo-Za - Ninja Magic Story of Voluptuous Flower mit Batch-Datei !Onmyōza im Verzeichnis zu sein.

Der IF Zustand überprüft, ob gibt es in der aktuellen Unterverzeichnis des Verzeichnisses der Batch-Datei als Re-Encode von FOR ein Unterverzeichnis gefunden.

Wenn ein Unterverzeichnis Re-Encode vorhanden ist, werden alle Dateien in diesem Unterverzeichnis um eine Verzeichnisebene bis zum aktuellen Unterverzeichnis im Stapelverarbeitungsdateiverzeichnis verschoben.

Dann wird das Unterverzeichnis Re-Encode entfernt, das nur funktioniert, wenn es keine Dateien oder andere Unterverzeichnisse mehr enthält und kein laufender Prozess dieses Verzeichnis als aktuelles Verzeichnis verwendet.

Fehlermeldungen, die aufgrund einer zu verschiebenden Datei ausgegeben werden können, sind bereits im Albumverzeichnis vorhanden und werden schreibgeschützt. Die zu verschiebende Datei wird in einer Anwendung geöffnet, was zu einer Zugriffsverletzung führt, oder das Unterverzeichnis Re-Encode nicht beim Löschen leer, ...werden unterdrückt, indem sie von Handle STDERR zu Gerät NUL umgeleitet werden.

Um die verwendeten Befehle und ihre Funktionsweise zu verstehen, öffnen Sie ein Eingabeaufforderungsfenster, führen Sie die folgenden Befehle aus und lesen Sie alle Hilfeseiten, die für jeden Befehl angezeigt werden, sorgfältig durch.

  • call /? ... erklärt %~dp0
  • echo /?
  • for /?
  • if /?
  • move /?
  • rd /?

lesen auch der Microsoft Artikel über Using Command Redirection Operators für eine Erläuterung von 2>nul.

+0

Hallo Mofi, vielen Dank. Dieses Skript ist in Echtzeit und funktioniert wie ein Charme! – noobcoder

+0

Und danke für die gute Erklärung. – noobcoder

Verwandte Themen