Stapel Umbenennen aller PNG-Dateien in Ordnern und Unterordnern

425
Rmuell01

Ich versuche, alle PNG-Dateien in mehreren Unterordnern umzubenennen. Nachfolgend finden Sie meine Erklärung dazu, was ich mache:

What is currently in place: COMPANY SERVER1 (Random).png COMPANY2 SERVER32 (Random).png  What I want:  COMPANY SERVER1 Company - Server1 - (Date PNG Modified).png COMPANY2 SERVER32 Company2 - Server32 - (Date PNG Modified).png 

Wie kann ich das erreichen? Der Teil, mit dem ich Probleme habe, ist, den ersten und den zweiten Verzeichnisnamen sowie das Datum zu erhalten, an dem ich den Dateinamen beibehalten kann.

Das aktuelle Skript, das ich habe, ist unten:

@echo off for /r %%D in (.) do ( for /f "delims=" %%F in ('dir /b /A:-D "%%D\*.png"') do ( echo ren "D:\FinalDir\%%F" "%%~nxD-VirtualBootTest-3-3-18.png" )) >> "D:\FinalDir\RenameCommands.txt"   FOR /R "D:\OriginalDir" %%i IN (*.png) DO COPY "%%i" "D:\FinalDir" 

Im Moment werden dabei alle PNG-Dateien in allen Verzeichnissen des Ordners gesammelt, in dem eine Batchdatei erstellt wurde, um alle Dateien umzubenennen, die in FinalDir kopiert wurden. Das Endergebnis der Umbenennung sieht dann wie SERVER1-VirtualBootTest-3-3-18.png aus. Ich kann nicht herausfinden, wie man das Datum mit der Datei ändert und das Verzeichnis zwei Verzeichnisse oberhalb der Datei hinzufügt.

0

1 Antwort auf die Frage

0
HeedfulCrayon

Dieses Skript sollte also ausreichen. Das ist relativ einfach.

$files = Get-ChildItem $basePath -File -Filter *.png -Recurse foreach($file in $files){ $pathParts = $file.fullName.split('\') $dateMod = $file.LastWriteTime.ToString("MM-dd-yyyy") $first = $pathParts[-3] $second = $pathParts[-2] $file | Rename-Item -NewName "$first - $second - $dateMod.txt" } 

Hier ist die Aufteilung Teil für Teil:

$files = Get-ChildItem $basePath -File -Filter *.png -Recurse 

Zuerst werden alle Dateien beginnend mit dem Basispfad (Sie müssen die $basepathVariable auf Ihren Pfad festlegen ) rekursiv bis zum Ende der Struktur abgerufen.

foreach($file in $files){ $pathParts = $file.fullName.split('\') $dateMod = $file.LastWriteTime.ToString("MM-dd-yyyy") $first = $pathParts[-3] $second = $pathParts[-2] $file | Rename-Item -NewName "$first - $second - $dateMod.txt" } 

Dann für jede Datei:

  • Teilt den vollständigen Namen der Datei (Pfad und Dateiname) basierend auf dem Zeichen "\".

    $pathParts = $file.fullName.split('\')

  • Greift auf lastWriteTime zu und formatiert es in das gewünschte Format.

    $dateMod = $file.LastWriteTime.ToString("MM-dd-yyyy")

  • Für die Variablen $firstund $secondgreift es auf den Pfad zu, der von der rechten Seite aus geteilt wurde (-1 wäre Dateiname, -2 ist übergeordnetes Element, -3 ist übergeordnetes Element dieses übergeordneten Elements usw.).

    $first = $pathParts[-3]

    $second = $pathParts[-2]

  • Nimmt alle gesammelten Informationen auf und benennt die Datei in die gesammelten Informationen um.

    $file | Rename-Item -NewName "$first - $second - $dateMod.txt"