2017-05-12 7 views
0

Ich versuche, eine Reihe von Dateien rekursiv nur mit dem übergeordneten auf einer bestimmten Ebene umbenennen. Ich habe Dateien in:Umbenennen von Dateien basierend auf Eltern-dirrectory

\test\d1\d2\d3\d1.png 
\test\d4\d5\d6\d4.png 
\test\d7\d8\d9\d7.png 

Exploring mit rekursiv für/R keine klare Lösung einen höheren Level-Ordner zu umbenennen zu bekommen:

\test\d1\d2\d3\000.png 
\test\d4\d5\d6\000.png 
\test\d7\d8\d9\000.png 

, die konvertiert werden soll.

Die 000.png ist die einzige Datei, und keine ist in Zwischenverzeichnissen vorhanden.

Ich habe versucht, zu verwenden:

@echo off 
pushd "C:\Users\test" 
for /d %%P in (*) do for /f "delims=" %%F in ('dir /b /s /a-d "%%P"') do rename "%%F" "%%P_%%~nxF" 
popd 

von einem anderen Thread, aber Mühe habe zu verstehen, was das Skript tut.

+0

bestimmten Ebene angeben, von oben gezählt oder aus der Datei? Nur Datei '000.png'? Sind diese Dateien auch in Zwischenordnern vorhanden? Was ist dein Code bisher? [SO] ist kein Skriptdienst. – LotPings

+0

Die 000.png ist die einzige Datei, und keine ist in Zwischenverzeichnissen vorhanden. – Joesh

+1

Schreiben Sie keinen Code in Kommentare, bearbeiten Sie Ihre Frage. – LotPings

Antwort

0
@echo off 
pushd "C:\Users\test" 
for /d %%P in (*) do for /f "delims=" %%F in ('dir /b /s /a-d "%%P\000.png" 2^>NUL' 
) do echo rename "%%~fF" "%%~nP%%~xF" 
popd 
  • pushd speichert aktuellen Ordner in einem Stapel und Änderungen in den angegebenen Ordner wiederhergestellt
  • popd den alten Ordner.
  • Die for /d iteriert alle Unterordner von "C: \ Users \ test" mit %%P das ist Ihr gewählter Name.
  • Die for/f analysiert Dir-Ausgabe ausgehend von diesem Ordner alle 000.png-Dateien erhalten.
  • %%~nP bekommt nur den Namen des Ordners (d1/d4/d 7) mit dem ~n Modifier (siehe for /?)
Verwandte Themen