如何解决长文件名导致CMD/PowerShell无法批量复制文件的问题?
解决长文件名批量转移问题
针对你的场景,这里有几个可靠的解决方案,都能完美处理长文件名问题:
方法一:PowerShell 脚本(灵活易定制)
PowerShell原生支持长路径,逻辑清晰,适合处理批量文件操作:
- 准备好你的文件清单
file_list.txt,确保每行是Dir1中的文件名(可带相对/绝对路径,也可只写文件名) - 创建一个名为
move_files.ps1的脚本,填入以下内容(替换实际路径):
# 替换成你的源目录和目标目录路径 $sourceDir = "C:\Your\Path\Dir1" $targetDir = "C:\Your\Path\Dir2" # 替换成你的文件清单路径 $fileList = Get-Content "C:\Your\Path\file_list.txt" # 自动创建目标目录(如果不存在) if (-not (Test-Path $targetDir)) { New-Item -ItemType Directory -Path $targetDir | Out-Null } # 遍历清单转移文件 foreach ($file in $fileList) { $sourcePath = Join-Path -Path $sourceDir -ChildPath $file if (Test-Path $sourcePath) { Move-Item -Path $sourcePath -Destination $targetDir -Force Write-Host "已转移: $file" } else { Write-Warning "未找到文件: $file" } }
- 运行脚本:右键点击脚本文件选择「用PowerShell运行」,或者在PowerShell窗口中输入
.\move_files.ps1。如果遇到执行策略限制,先执行Set-ExecutionPolicy RemoteSigned(临时允许本地脚本运行)。
方法二:Robocopy 命令(高效稳定)
Robocopy是Windows自带的高级文件复制工具,天生支持长路径,处理大量文件效率极高:
直接在命令提示符(CMD)或PowerShell中执行以下命令(替换实际路径):
robocopy "C:\Your\Path\Dir1" "C:\Your\Path\Dir2" /XF * /IF @C:\Your\Path\file_list.txt /MOV
参数说明:
/XF *:排除源目录中所有文件,只保留清单指定的文件/IF @file_list.txt:指定要包含的文件清单,@后面是清单文件的完整路径/MOV:移动文件(复制完成后删除源文件),如果只需要复制而不删除源文件,去掉/MOV即可
注意:文件清单file_list.txt中每行只需要写文件名(不需要带路径),必须和Dir1中的文件名完全匹配。
可选:启用系统全局长路径支持
如果上述方法仍遇到路径过长问题,可以开启Windows的长路径支持(适用于Windows 10 1607版本及以上、Windows 11):
- 按下Win+R,输入
gpedit.msc打开组策略编辑器 - 导航到:
计算机配置 > 管理模板 > 系统 > 文件系统 - 找到「启用 Win32 长路径」选项,设置为「已启用」
- 重启电脑后生效
内容的提问来源于stack exchange,提问作者Trivino Y Garcia Abelardo
相关产品推荐
相关产品推荐

