Tengo algunos usuarios que ocasionalmente agregan accidentalmente una extensión de archivo a un archivo y han estado tratando de descubrir cómo escribir esto en PowerShell.
Por ejemplo, el usuario nombra un archivo "document123.docx.docx" pero tiene las extensiones de archivo visibles deshabilitadas en su máquina, por lo que asume que el nombre del archivo es "document123.docx". ¿Cómo puedo buscar extensiones de archivo con doble agregado para que esto pueda ser fácilmente? ¿identificado?
Esto sólo afecta al código del programa que espera que el archivo exacto se llame "document123.docx" y como no existe, no puede continuar.
Respuesta1
Para buscar archivos con la misma extensión duplicada, intente:
Get-ChildItem -Path .\* -Recurse -File |
Where-Object{$_.Extension -and $_.BaseName -like "*$($_.Extension)"}
Para eliminar automáticamente la extensión duplicada:
Get-ChildItem -Path .\* -Recurse -File |
Where-Object{$_.Extension -and $_.BaseName -like "*$($_.Extension)"}|
Rename-Item -NewName {$_.BaseName} -WhatIf
Si el resultado se ve bien, elimine el final-WhatIf
Respuesta2
El script funcionaría bien si estuviera en una carpeta que quisiera verificar, pero al verificar desde C:\ daría un error y se cerraría porque no tendría suficientes derechos ni siquiera para ejecutarse como administrador cuando llegaría a algunas carpetas anidadas dentro de C: \Windows, así que excluí esa carpeta y luego, para suprimir los errores que no salen, agregué la opción de continuar silenciosamente como se muestra a continuación.
Get-ChildItem -Path .\* -Recurse -File -Exclude "C:\Windows\" -EA SilentlyContinue|
Where-Object{$_.Extension -and $_.BaseName -like "*$($_.Extension)"}