Salve o seguinte em um arquivo Set-DosFileName.ps1
[CmdletBinding(SupportsShouldProcess=$true)]
Param(
[parameter(Mandatory=$true)]
[string]$folder,
[switch]$recurse
)
$fso = New-Object -ComObject Scripting.FileSystemObject
Get-ChildItem -Path $folder -File -Recurse:$recurse | ForEach-Object {
$shortName = $fso.getfile($_.Fullname).ShortName
if ($shortName -ne $_.Name)
{
$fullShortName = Join-Path $_.Directory -ChildPath $shortName
Move-Item -LiteralPath $_.Fullname -Destination $fullShortName
}
}
Para usar isso, abra uma janela do PowerShell e mude para o diretório em que você salvou o arquivo:
cd "D:\folder where you saved the script"
então:
.\Set-DosFileName.ps1 -folder "D:\myfiles\Foo Bar" -whatif
O script deve mostrar como ele renomeia seus arquivos.
Para incluir todos os arquivos em subdiretórios, adicione a opção -recurse
:
.\Set-DosFileName.ps1 -folder "D:\myfiles\Foo Bar" -whatif -recurse
Se tudo estiver correto, remova a opção -whatif
para realmente renomear os arquivos. Eu ainda manteria um backup dos arquivos originais apenas no caso de algo dar errado.
Eu não testei isso com um grande número de arquivos, saiba que alguns nomes de arquivos podem ser bem feios.