我有一些用户偶尔会意外地将文件扩展名重复附加到文件中,并且一直在尝试弄清楚如何在 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)"}