У меня есть пользователи, которые время от времени случайно дважды добавляют расширение файла к файлу, и я пытаюсь понять, как написать скрипт для этого в 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)"}