Moredread 10 Geschrieben 6. Oktober 2015 Melden Teilen Geschrieben 6. Oktober 2015 (bearbeitet) Hallo, ich stehe vor folgendem Problem: Das Backup in der Firma läuft auf USB-Festplatten. Funktioniert grundsätzlich auch prima. Etwa einmal im Monat muss ich aber ältere Backups von den Platten löschen, da sie ansonsten überlaufen. Unglücklicherweise befinden sich im Backup Dateien, deren Namen in Kombination mit dem Unterordner zu lang sind. Um die Dateien löschen zu können, verschiebe ich sie auf die oberste Ebene im Laufwerk und benenne die Ordner bis in die dritte Unterebene um, so, das die Ordnernamen nur noch aus einem einzigen Buchstaben oder Zahl bestehen. Dann erst kann ich sie komplett löschen. Was ich benötige, wäre also ein Script, das alle in einem bestimmten Ordner befindlichen Ordner umbenennt (in irgend etwas kurzes), und das bis zur dritten Unterebene. In etwa also so: Alternativ nehme ich auch gerne ein Skript, das die Ordner ohne Umbenennen löschen kann - das aber scheint nicht ohne weiteres möglich. Hat jemand Vorschläge? :) mfg JM bearbeitet 6. Oktober 2015 von Moredread Zitieren Link zu diesem Kommentar
Beste Lösung MurdocX 954 Geschrieben 6. Oktober 2015 Beste Lösung Melden Teilen Geschrieben 6. Oktober 2015 Ich hab für Dich ein Skript geschrieben, welche genau das macht, was du brauchst :) Viel Spaß damit! #requires -Version 3 function Invoke-RenameFolder { param([STRING]$StartEbene,[STRING]$AktuelleEbene,[INT]$Tiefe) $StartTiefe = $StartEbene.Split('\').Count $Ordner = Get-ChildItem -Path $AktuelleEbene -Directory foreach($obj in $Ordner) { [INT]$AktuelleTiefe = ($obj.FullName.ToString()).Split('\').Count if (($AktuelleTiefe - $StartTiefe) -le $Tiefe) { Invoke-RenameFolder -StartEbene $StartEbene -AktuelleEbene $($obj.FullName) -Tiefe $Tiefe } } $SplittedPath = $AktuelleEbene.Split('\') For ($x = 0;$x -lt $($SplittedPath.Count-1)) { if ($JointPath -like '') { $JointPath = $SplittedPath[$x].ToString() } else { $JointPath = "$JointPath\$($SplittedPath[$x].ToString())" } $x++ } do { $i++ $result = Test-Path -Path "$JointPath\$i" # Wenn der Pfad existiert, dann Zähle eins höher } while ($result -eq $true) try { if ($AktuelleEbene -notlike $StartEbene) { Rename-Item -Path $AktuelleEbene -NewName $i -ErrorAction Stop Write-Host "[OK] Erfolgreich umbenannt: '$AktuelleEbene' > '$JointPath\$i'" -ForegroundColor Green } } catch { Write-Host "Fehler: $_" -ForegroundColor Red } } <# !! INFO: START ist die Tiefe 0 !! #> [String]$START = 'D:\TEST' [INT]$Tiefe = 2 Invoke-RenameFolder -StartEbene $START -AktuelleEbene $START -Tiefe $Tiefe Zitieren Link zu diesem Kommentar
Moredread 10 Geschrieben 7. Oktober 2015 Autor Melden Teilen Geschrieben 7. Oktober 2015 Ich hab für Dich ein Skript geschrieben, welche genau das macht, was du brauchst :) Viel Spaß damit! #requires -Version 3 [...] Invoke-RenameFolder -StartEbene $START -AktuelleEbene $START -Tiefe $Tiefe Genial! Das Script mach exakt das, was ich brauche :thumb1: Außerdem *weiß* ich jetzt, das ich mich unbedingt mit der Powershell auseinandersetzen muss. Vielen Dank! :) Zitieren Link zu diesem Kommentar
MurdocX 954 Geschrieben 7. Oktober 2015 Melden Teilen Geschrieben 7. Oktober 2015 Genial! Das Script mach exakt das, was ich brauche :thumb1: Außerdem *weiß* ich jetzt, das ich mich unbedingt mit der Powershell auseinandersetzen muss. Vielen Dank! :) Dann waren die 2 Stunden gut investiert, das freut mich :) Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.