当尝试删除时,Windows 似乎对文件名的长度有限制,但它不会阻止这些文件的创建。
我们的构建过程创建了许多临时文件(许多都是从 WSDL 构建的),这些文件违反了此限制。我们的 ant 脚本在执行清理时能够以某种方式删除它们,但有时我需要删除工作区目录(所有临时文件所在的目录),而无需真正从 ant 执行完全清理。
这是同样的错误这个问题,但那里的答案对我来说并不适用,因为我处理的是目录,而不是文件,而且我并不总是知道哪些特定文件或子目录导致了问题。而且我试图避免任何手动过程(除了触发单个命令)来实际删除它们。
如果我尝试从资源管理器中删除目录,我会收到错误
Cannot delete [file name]: The file name you specified is not valid or too long.
Specify a different file name
在 powershell 中尝试Remove-Item
出现以下错误:
Remove-Item : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
At line:1 char:12
+ Remove-Item <<<< -force -Recurse <directory>
是否有人知道任何工具或简单的方法来解决此删除错误,而无需手动查找问题文件并移动/重命名它们?
答案1
使用7-Zip文件管理器来删除它们。
如果仍有问题,请确保使用7-Zip 文件管理器中的Shift+ Delete。否则,Windows 会尝试将它们移至回收站(这将再次失败)。
答案2
答案3
有无需安装任何程序解决这个问题。
robocopy
使用自 2006 年推出的 Windows Vista 起预装的可以轻松解决此问题。
例如,rmdir /S /Q <dir>
据报道在某些情况下会失败。没有必要使用 7zip 或任何其他第三方工具。Powershell 是多余的。Cygwin 可能有效,但您可能没有安装它。所以,让我们专注于robocopy
这个想法是
- 用于
robocopy
复制+更新 - 来自新的空文件夹
- 到要删除的文件夹,即目标。
执行后robocopy
,目标目录也将为空。
这些说明适用于命令行。只需在 Windows 中打开搜索,输入cmd
并按 Enter 即可。
假设目标删除操作为:
C:\delete\this folder\with a very long name
我们进行如下:
首先创建一个空目录,fi
C:\emptyfolder
。mkdir C:\emptyfolder
使用选项从空目录复制并更新到目标
/purge
robocopy c:\emptyfolder "C:\delete\this folder\with a very long name" /purge
删除空目录。你不再需要它了。
rmdir c:\emptyfolder
由于源目录 ( ) 中没有文件或文件夹C:\emptyfolder
,它只是递归地删除目标目录 ( ) 下的文件和文件夹C:\delete\this folder\with a very long name
!
最后的技巧:你可以避免手写
C:\delete\this folder\with a very long name
通过将文件夹从资源管理器窗口拖放到终端/cmd 窗口。
当心:已删除的文件不会被扔进垃圾桶文件夹!一旦删除,文件将无法恢复。
(取自BVLANGEN 的“路径太长?使用 Robocopy”)
附言:我意识到这个答案在这里,不那么说教。如何在 Windows 中删除文件名太长的文件?[重复]
伯努瓦添加:
您可能需要多次执行此过程才能删除所有文件。
答案4
无需安装其他软件,您可以使用subst
命令临时创建长名目录的别名。
例如,如果你想删除文件夹,C:\Very long directory\that exceed\length limit\blah blah blah\abcde\folder to be deleted
你可以使用命令
subst x: "C:\Very long directory\that exceed\length limit\blah blah blah\abcde"
然后您可以X:\folder to be deleted
在 Windows 资源管理器或命令提示符中轻松删除。要删除临时驱动器号别名,请使用命令
subst x: /d