Ich habe einige Benutzer, die gelegentlich versehentlich eine Dateierweiterung doppelt an eine Datei anhängen und versucht haben, herauszufinden, wie man dies in Powershell skriptet.
Z. B.: Der Benutzer benennt eine Datei „document123.docx.docx“, hat aber sichtbare Dateierweiterungen auf seinem Computer deaktiviert, sodass er annimmt, der Dateiname sei „document123.docx“. Wie kann ich nach doppelt angehängten Dateierweiterungen suchen, damit diese leicht identifiziert werden können?
Dies betrifft nur Programmcode, der erwartet, dass die genaue Datei „document123.docx“ heißt, und da diese nicht existiert, kann er nicht fortfahren.
Antwort1
Um Dateien mit doppelter Erweiterung zu finden, versuchen Sie:
Get-ChildItem -Path .\* -Recurse -File |
Where-Object{$_.Extension -and $_.BaseName -like "*$($_.Extension)"}
So entfernen Sie die doppelte Erweiterung automatisch:
Get-ChildItem -Path .\* -Recurse -File |
Where-Object{$_.Extension -and $_.BaseName -like "*$($_.Extension)"}|
Rename-Item -NewName {$_.BaseName} -WhatIf
Wenn die Ausgabe in Ordnung ist, entfernen Sie die folgenden-WhatIf
Antwort2
Das Skript funktionierte einwandfrei, wenn ich mich in einem Ordner befände, den ich prüfen wollte. Beim Prüfen von C:\ aus trat jedoch ein Fehler auf und das Skript wurde beendet, da es selbst bei Ausführung als Administrator nicht über ausreichende Rechte verfügte und auf verschachtelte Ordner in C:\Windows stieß. Daher schloss ich diesen Ordner aus und fügte dann, um nicht auftretende Fehler zu unterdrücken, die Option zum stillen Fortfahren wie unten hinzu.
Get-ChildItem -Path .\* -Recurse -File -Exclude "C:\Windows\" -EA SilentlyContinue|
Where-Object{$_.Extension -and $_.BaseName -like "*$($_.Extension)"}