2013-03-10 4 views
8

Ich bin sehr neu zu Eingabeaufforderung, und begann erst vor es ab 1 Tag verwenden.Wie Dateierweiterungen innerhalb Unterordner Batch ändern

Ich habe einen Ordner an einem Ort, zum Beispiel C:\Users\Administrator\Desktop\Images, und in diesem Ordner gibt es etwa 650 Unterordner, von denen jeder etwa 20 Bilder enthält, eine Mischung aus JPGs und PNGs. Ich suche eine Befehlszeile für CMD, die alle Unterordner durchläuft und jede .png Datei in eine .jpg Datei ändert.

Ich habe eine wenig Forschung getan und einige Informationen zu finden, aber es ist sehr schwer zu verfolgen und zu verstehen, und ich bin nach wie vor nicht in der Lage, es zu tun. Ich wünsche die Dateinamen zu halten, aber jede Erweiterung von einem zu einem .jpg.png Datei ändern.

Ich verstehe, dass für 1 Ordner die Zeile so etwas wie ren *.png *.jpg ist. Dies gilt jedoch nicht für Änderungen an Unterordnern.

@ECHO OFF 
PUSHD . 
FOR /R %%d IN (.) DO (
    cd "%%d" 
    IF EXIST *.png (
     REN *.png *.jpg 
    ) 
) 
POPD 

Update::

+0

Ich denke, diese Frage gehört in [SuperUser] (http://superuser.com/) statt StackOverflow. Stack Overflow ist speziell für die Programmierung von Fragen gedacht. – Jesse

+1

@Jesse: Es gibt viele Fragen zu SO über Batch oder andere Shell-Programmierung oder ähnlich bash Programmierung. Warum sollte dieser hier nicht passen? –

+0

@Jesse: In der Tat handelt es sich um Scripting, nicht nur mit einem vorgefertigten Werkzeug. Scripting ist auch Programmieren, insbesondere wenn es Kontrollstrukturen wie Schleifen benötigt. –

Antwort

13

Wenn ich das richtig verstanden, dass Sie nur die Dateien von .png zu .jpg und nicht wandeln sie umbenennen möchten, können Sie den folgenden Batch-Code verwenden, fand ich eine bessere Lösung here, die Sie direkt von der Kommandozeile ausgeführt werden können (%%f anstelle von %f verwenden, wenn dies in einer Batch-Datei):

FOR /R %f IN (*.png) DO REN "%f" *.jpg 

Beachten Sie, dass das oben das aktuelle Verzeichnis verarbeitet und dessen Unterverzeichnissen. Bei Bedarf können Sie ein beliebiges Verzeichnis als root wie folgt angeben:

+1

'Pushd .'? Was ist der Punkt (wenn Sie das Wortspiel verzeihen)? :) –

+0

@AndriyM: Lustiges Wortspiel :-) ich, dass die Eingabeaufforderung kehrt zum ursprünglichen Verzeichnis, um sicherzustellen, wollte in allen Unterverzeichnissen nach dem Abschluss, und nicht im Verzeichnis es in der letzten 'cd'-ed enden. Gibt es einen besseren Weg, dies zu erreichen? –

+0

Ein * alternativer * Weg, ja. Ob es besser wäre, bin ich mir nicht sicher. Was ich mir vorstelle, ist das Speichern von '% CD%' in einer Variablen vor der Schleife und dann das anschließende CD-Einlesen. Zwei Befehle auch, aber zu banal, denke ich. :) Deine Erklärung macht für mich einen guten Sinn, danke dafür. –