标准的 Windows 命令行工具,如 xcopy、rmdir 无法使用超过 MAX_PATH(260 个字符)的路径进行操作。如果要删除包含完整路径长于 MAX_PATH 的此类文件的目录,或者如果要将目录递归复制到其中至少一个文件的完整路径长于 MAX_PATH 的位置,那么这些命令行工具失败。
但是,您可以使用“move”命令行工具绕过它,因为与 xcopy 和 rmdir(rd) 不同,它似乎不会逐个迭代目录中的文件。
这种解决方法可能并不总是很方便并且需要额外的操作,但出于自动化/脚本编写的目的,如果您不能或不想使用特殊工具(即 robocopy),我看不到任何其他方法。这种方式适用于目录,但不适用于单个文件。让我举个例子。
创建一个目录。路径长度:245 个字符
E:\>mkdir E:\veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongdirectory
你可以在其中创建一个文件,使文件路径长度大于 MAX_PATH。通常的方法是行不通的。
E:\>echo "content" > E:\veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongdirectory\longlonglonglonglongfilename.txt
The system cannot find the path specified.
解决方法:创建具有短路径的文件并将包含文件的目录移动到长路径中。
E:\>echo "content" > somedir\longlonglonglonglongfilename.txt
E:\>move somedir E:\veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongdirectory\
1 dir(s) moved.
检查 1:目录是否已完全移动(包含所有文件)? - 是的。
E:\>dir E:\veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongdirectory\somedir
Volume in drive E is Workspace
Volume Serial Number is C864-7C96
Directory of E:\veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongdirectory\somedir
08/09/2019 11:52 AM <DIR> .
08/09/2019 11:52 AM <DIR> ..
08/09/2019 11:52 AM 12 longlonglonglonglongfilename.txt
1 File(s) 12 bytes
2 Dir(s) 130,574,221,312 bytes free
检查 2. 路径确实比 MAX_PATH 长,这就是为什么通常的命令行工具无法通过完整路径访问它,所以我们做的一切都是正确的:
E:\>dir E:\veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongdirectory\somedir\longlonglonglonglongfilename.txt
Volume in drive E is Workspace
Volume Serial Number is C864-7C96
Directory of E:\veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryloooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooongdirectory\somedir
File Not Found
如果要删除(使用 rmdir)包含路径长于 MAX_PATH 的子文件夹/文件的目录,则相同的解决方法是有效的。只需将上层目录移动到某个简短的临时位置,然后您就可以对其进行 rmdir 操作。
注意:Windows 命令行工具“move”只能在同一个磁盘盘符内移动目录。