PowerShell zum Auffinden versehentlich doppelter Dateierweiterungen

PowerShell zum Auffinden versehentlich doppelter Dateierweiterungen

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)"}

verwandte Informationen