Сохраните следующее в файл 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
}
}
Чтобы использовать это, откройте окно PowerShell и перейдите в каталог, где вы сохранили файл:
cd "D:\folder where you saved the script"
затем:
.\Set-DosFileName.ps1 -folder "D:\myfiles\Foo Bar" -whatif
Скрипт должен показать, как он будет переименовывать ваши файлы.
Чтобы включить все файлы в подкаталоги, добавьте ключ -recurse
:
.\Set-DosFileName.ps1 -folder "D:\myfiles\Foo Bar" -whatif -recurse
Если все выглядит хорошо, удалите ключ -whatif
чтобы фактически переименовать файлы. Я бы все еще оставил резервную копию оригинальных файлов на случай, если что-то пойдет не так.
Я не проверял это с большим количеством файлов, помните, что некоторые имена файлов могут быть довольно уродливыми.