有没有办法在 PC 上将长文件名转换为截断的短格式?有没有简单的方法可以做到这一点?我是命令提示符/PowerShell 的新手,不完全了解长脚本的作用以及如何修改它们。
我想将所有文件传输到外部硬盘驱动器,但许多文件来自名称很长的 Mac,因此当我尝试传输它们时收到错误。
答案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
开关以实际重命名文件。我仍然会保留原始文件的备份,以防万一出现问题。
我还没有对大量文件进行测试,请注意有些文件名可能非常难看。
答案2
自 Windows 10 版本 1607 起,文件路径长度限制已被取消。要启用此功能,打开regedit.exe
,转到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
并创建一个 DOWRD 32BitLongPathsEnabled
并将值更改为1
。
现在 260 个字符的问题已经消失。