PowerShell для поиска случайных двойных расширений файлов

PowerShell для поиска случайных двойных расширений файлов

У меня есть пользователи, которые время от времени случайно дважды добавляют расширение файла к файлу, и я пытаюсь понять, как написать скрипт для этого в PowerShell.

Например, пользователь называет файл «document123.docx.docx», но на его компьютере отключены видимые расширения файлов, поэтому он предполагает, что имя файла — «document123.docx». Как выполнить поиск файлов с двойным добавлением расширений, чтобы их можно было легко идентифицировать?

Это влияет только на программный код, который ожидает, что файл будет иметь точное имя «document123.docx», и поскольку он не существует, он не может продолжить работу.

решение1

Чтобы найти файлы с одинаковым расширением, попробуйте:

Get-ChildItem -Path .\* -Recurse -File | 
    Where-Object{$_.Extension -and $_.BaseName -like "*$($_.Extension)"}

Чтобы автоматически удалить двойное расширение:

Get-ChildItem -Path .\* -Recurse -File | 
    Where-Object{$_.Extension -and $_.BaseName -like "*$($_.Extension)"}|
        Rename-Item -NewName {$_.BaseName} -WhatIf

Если вывод выглядит нормально, удалите конечный символ.-WhatIf

решение2

Скрипт работал бы нормально, если бы я находился в папке, которую хотел проверить, но при проверке из C:\ он выдавал ошибку и завершал работу, так как у него не было достаточных прав даже при запуске от имени администратора, когда он попадал на некоторые вложенные папки внутри C:\Windows, поэтому я исключил эту папку, а затем, чтобы подавить ошибки, не приводящие к выходу, добавил опцию продолжения без вывода сообщений, как показано ниже.

Get-ChildItem -Path .\* -Recurse -File -Exclude "C:\Windows\" -EA SilentlyContinue| 
    Where-Object{$_.Extension -and $_.BaseName -like "*$($_.Extension)"}

Связанный контент