![robocopy 在将文件从源复制到 longpath 目标时出现问题](https://linux22.com/image/1616712/robocopy%20%E5%9C%A8%E5%B0%86%E6%96%87%E4%BB%B6%E4%BB%8E%E6%BA%90%E5%A4%8D%E5%88%B6%E5%88%B0%20longpath%20%E7%9B%AE%E6%A0%87%E6%97%B6%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98.png)
我正在使用 robocopy $source $destination /MIR,它确实会与源同步复制文件,但会跳过源中具有长路径名的文件和目录。
我想修复这个问题,我尝试了几种方法,但都没有成功。
答案1
Robocopy 默认对长路径没有限制,你可以选择使用“/256”标志禁用它,
例如:
robocopy $source $destination /MIR /256
参考:堆栈溢出
解决方案 2: 绕过此类错误的另一种解决方案是将目标文件夹安装到较低级别并从那里恢复同步。
答案2
仔细检查所有文件路径是否确实进入$source
和$dest
。Windows API 确实不喜欢长文件路径。
解决此类问题的一个方法是使用Unicode 路径,看起来像\\?\C:\path\to\file
或\\?\UNC\server\share
并允许 30,000 个字符。在不了解脚本的早期部分的情况下执行此操作的一种黑客方法是仅编辑源路径的字符串:
robocopy ($source -replace '\\','\\?\') $dest /MIR
或者
robocopy ($source -replace 'C:','\\?\C:') $dest /MIR