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 $basepath
Variable 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
$first
und$second
greift 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"