Her*_*rms 411 windows file-management
Windows 在尝试删除时似乎对文件名有长度限制,但它不会阻止创建这些文件。
我们的构建过程会创建许多违反此限制的临时文件(许多是基于 WSDL 构建的)。我们的 ant 脚本在执行清理时能够以某种方式删除它们,但有时我需要删除 workarea 目录(所有临时文件所在的位置)而不实际从 ant 中进行完全清理。
这是这个问题的相同错误,但那里的答案对我来说并不真正有用,因为我正在处理一个目录,而不是一个文件,而且我并不总是知道是什么特定的文件或子目录导致了问题。而且我试图避免任何手动过程(除了触发单个命令)来实际删除它们。
如果我尝试从资源管理器中删除目录,我会收到错误
Cannot delete [file name]: The file name you specified is not valid or too long.
Specify a different file name
Run Code Online (Sandbox Code Playgroud)
Remove-Item在powershell中尝试会出现以下错误:
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>
Run Code Online (Sandbox Code Playgroud)
有没有人知道任何工具或简单的方法来解决这个删除错误,而不必手动找到问题文件并移动/重命名它们?
Den*_*asi 468
使用7-Zip文件管理器删除它们。
如果您仍然遇到问题,请确保在 7-Zip 文件管理器中使用Shift+ Delete。否则,Windows 会尝试将它们移动到回收站(这将再次失败)。
jor*_*ker 315
这里的其他(免费)答案都不适合我,但我在另一个网站上找到了一个:
rimraf <dir>
Run Code Online (Sandbox Code Playgroud)
rimraf是一个Node.js的包,所以你需要安装Node.js的,其中包括故宫。然后你可以运行:
npm install -g rimraf
Run Code Online (Sandbox Code Playgroud)
然后你可以从命令行运行rimraf。
我找到了这个解决方案,因为 npm 本身由于嵌套依赖项的方式而导致了这个问题。
顺便说一下,rimraf它的名字来自 UNIX 命令rm -rf,它递归地删除文件和文件夹。
hec*_*pal 186
有无需安装任何程序来解决这个问题。
使用robocopy自 2006 年推出的 Windows Vista 以来预装的可以轻松解决此问题。
例如,rmdir /S /Q <dir>已报告在某些情况下失败。无需使用 7zip 或任何其他 3rd 方工具。Powershell 是一种矫枉过正。Cygwin 可以工作,但您可能没有安装它。所以,让我们专注于robocopy
这个想法是
robocopy复制+更新 执行后robocopy,目标目录也将为空。
这些说明适用于命令行。只需在 Windows 中打开搜索,键入cmd并按 Enter。
假设删除的目标是:
C:\delete\this folder\with a very long name
Run Code Online (Sandbox Code Playgroud)
我们按照以下步骤进行:
首先创建一个空目录 fi C:\emptyfolder。
mkdir C:\emptyfolder
Run Code Online (Sandbox Code Playgroud)使用选项从空目录复制+更新到目标 /purge
robocopy c:\emptyfolder "C:\delete\this folder\with a very long name" /purge
Run Code Online (Sandbox Code Playgroud)删除空目录。你不再需要它了。
rmdir c:\emptyfolder
Run Code Online (Sandbox Code Playgroud)由于源目录(C:\emptyfolder)中没有文件或文件夹,它只是C:\delete\this folder\with a very long name递归删除目标目录()下的文件和文件夹!
最后一个技巧:你可以避免手写
C:\delete\this folder\with a very long name
Run Code Online (Sandbox Code Playgroud)
通过从资源管理器窗口拖动文件夹并放入终端/cmd 窗口。
注意:删除的文件不会进入垃圾文件夹!一旦删除,文件将无法恢复。
(摘自BVLANGEN 的“路径太长?使用 Robocopy”)
PS:我意识到这个答案就在这里,而不是说教。如何在 Windows 中删除文件名过长的文件?[复制]
贝努瓦补充说:
您可能需要多次执行此过程才能删除所有文件。
Her*_*rms 89
我相信我已经找到了一种从cmd. 最初我尝试了该del命令,但是没有用。然后我想起来了rmdir。执行以下操作:
rmdir /S /Q <dir>
Run Code Online (Sandbox Code Playgroud)
似乎奏效了。
Ken*_*h L 29
无需安装其他软件,您可以使用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"
Run Code Online (Sandbox Code Playgroud)
然后您可以X:\folder to be deleted轻松地在 Windows 资源管理器或命令提示符中删除。要删除临时驱动器号别名,请使用以下命令
subst x: /d
Run Code Online (Sandbox Code Playgroud)
gdw*_*dw2 27
Cygwinrm -rf在长路径上运行良好!
小智 23
只需通过运行以下命令从 Powershell 进入命令:
Cmd /C "rmdir /S /Q <dir>"
Run Code Online (Sandbox Code Playgroud)
小智 20
Dentrasi 的解决方案最适合我,但我想在顶级答案中发布具体步骤。
Jul*_*ght 15
现有答案中没有提到两件事。
Windows API 有一个特殊的函数,它支持长达 32k 个字符的 Unicode 路径名(每个元素的长度最多为 255 个字符)。
这通常被错误地称为 UNC 命名,但实际上并不是相关的。
用于告诉 API 使用长 Unicode 路径的前缀\\?\如下所示:
\\?\D:\very long path
Run Code Online (Sandbox Code Playgroud)
UNC 名称通常用于以\\servername\path name\file name. 您可以将其与长路径前缀结合使用,以便:\\?\UNC\server\share
请注意,一些写得不好但很普遍的应用程序不支持 UNC 文件路径,也不支持长路径前缀。
参考:https : //msdn.microsoft.com/en-gb/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath
这是一个已添加到最新版本的 Windows 10 的选项。在撰写本文时,默认情况下未激活它,因为它需要特定的应用程序支持。有趣的是,PowerShell 具有内置支持,因此启用此选项将允许在 PowerShell 脚本中直接使用长路径。
如果您有 Windows 版本,则可以通过组策略编辑器激活它。或者您可以简单地使用以下注册表更改。与往常一样,请在执行任何操作之前备份您要更改的注册表部分。
regedit.exe。HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\PoliciesLongPathsEnabled。LongPathsEnabled来1启用。任何具有适当清单条目的应用程序现在都可以访问 POSIX 标准长路径。这应该包括 Windows Store 应用程序。
参考:https : //blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/
更新 2017-04-09
@maoizm 指出了上面注册表项的一个问题,所以我做了更多的挖掘。看起来您现在可以使用系统键设置长文件名支持:
HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)
Run Code Online (Sandbox Code Playgroud)
这仍然仅适用于专门设置为使用它的应用程序(需要应用程序的 manifest.xml 中的条目)。
您还应该注意,您不能在此方法中使用相对路径名。
我喜欢 cmd 解决方案。虽然我想分享另一种甚至仅适用于资源管理器的解决方法:尝试在删除之前缩短父文件夹的名称:较短的名称将缩短路径。说,你有这个文件夹的树结构:
C:\
.. 项目
.. .. 2014 年春季的一些很棒的项目
.. .. .. 周五市内公园活动
.. .. .. .. bla bla bla bla bla bla bla bla bla bla bla bla
.. .. .. .. .. 也有长名称的实际文件
在这种情况下,您不能删除文件夹,也不能删除或重命名文件。如果要删除整个文件夹结构或其中的一部分,可以临时重命名父文件夹并缩短路径,然后删除文件夹。名称可以只是字母:
C:\
.. 项目
.. .. X
.. . . . y
.. .. .. z
.. .. .. .. .. 也有长名称的实际文件
就我而言,我只想删除包含许多子文件夹和文件的整个文件夹。所以我不关心文件夹的名字。
| 归档时间: |
|
| 查看次数: |
470974 次 |
| 最近记录: |