Есть ли способ конвертировать длинные имена файлов в усеченную краткую форму на ПК? Есть ли простой способ сделать это? Я новичок в использовании командной строки / PowerShell и не до конца понимаю, что делают длинные сценарии и как их изменять.

Я хочу перенести все мои файлы на внешний жесткий диск, но многие из них принадлежат Mac с длинными именами, и я получаю сообщение об ошибке при попытке перенести их.

2 ответа2

2

Начиная с Windows 10 версии 1607, ограничение длины пути к файлу удалено. Чтобы включить это, откройте regedit.exe , перейдите в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem и создайте 32-битный LongPathsEnabled и измените значение на 1 .

Теперь проблема с 260 символами исчезла.

1

Сохраните следующее в файл 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 чтобы фактически переименовать файлы. Я бы все еще оставил резервную копию оригинальных файлов на случай, если что-то пойдет не так.

Я не проверял это с большим количеством файлов, помните, что некоторые имена файлов могут быть довольно уродливыми.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .