2009-12-03 19:23:09 +0000 2009-12-03 19:23:09 +0000
387
387

如何删除路径/名称过长的目录

Windows似乎对文件名有一个长度限制,尽管它不会阻止这些文件被创建。我们的 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>

有谁知道有什么工具或简单的方法可以绕过这个删除错误而不需要手动找到问题文件并移动/重命名?

答案 (23)

432
432
432
2009-12-03 19:48:56 +0000

使用 7-Zip 文件管理器来删除它们。

如果你仍然有问题,请确保你在 7-Zip 文件管理器中使用 Shift+Delete。否则,Windows会尝试将它们移动到回收站(这将再次失败)。

311
311
311
2014-07-04 06:23:55 +0000

这里的其他(免费的)答案都没有对我有效,但我在另一个网站上找到了一个:

rimraf <dir>

rimraf 是一个 Node.js 包,所以你需要安装 Node.js,其中包括 npm 。然后你可以运行:

npm install -g rimraf

然后你可以在命令行中运行rimraf

我找到这个解决方案是因为npm本身就是因为npm的依赖关系嵌套方式导致了这个问题。

155
155
155
2016-03-03 16:45:54 +0000

不需要安装任何程序****来解决这个问题。

这个问题可以用robocopy很容易解决,从2006年推出的Windows Vista开始预装了rmdir /S /Q <dir>。没有必要使用7zip或其他任何第三方工具。Powershell是一个矫枉过正的工具。Cygwin可能可以用,但你可能没有安装它。所以,我们重点说一下robocopy

的思路是:

1.用robocopy复制+更新 2.从新的空文件夹 3.到你要删除的文件夹,也就是目标目录。只要在Windows中打开搜索,输入robocopy,然后按回车键就可以了。

假设要删除的目标是:

C:\delete\this folder\with a very long name

我们的操作步骤如下:

  1. 首先创建一个空目录,即cmd

  2. 从空目录中复制+更新到目标目录,使用选项C:\emptyfolder

  3. 删除空目录。因为源目录(/purge)中没有文件和文件夹,所以只需递归删除目标目录(C:\emptyfolder)下的文件和文件夹即可!

–最后一招:可以避免手写

**小心。被删除的文件不会进入垃圾箱*文件夹! 一旦删除后,文件无法恢复。

(摘自《路径太长? 使用Robocopy》 作者:BVLANGEN)

PS:我意识到这个答案在这里,少说教。在Windows中如何删除文件名过长的文件?复制]](https://superuser.com/a/467814/43193) Benoit 补充:

你可能需要不止一次地经历这个过程才能把所有的文件都删除。

86
86
86
2009-12-03 19:24:08 +0000

我相信我已经找到了一个从cmd中删除东西的方法。最初我试过del命令,但没有成功。后来,我想起了rmdir。做了以下操作:

rmdir /S /Q <dir>

似乎起了作用。

30
30
30
2014-11-25 20:22:32 +0000

当我遇到这个问题时,我使用的工具是 FastCopy 。我从下拉菜单中选择了删除所有,选择要删除的目录,然后点击删除所有

26
26
26
2014-09-26 19:40:05 +0000

Cygwin的rm -rf在长距离的路途中很好用!

26
26
26
2014-10-28 06:09:34 +0000

在不安装其他软件的情况下,你可以使用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"

命令,然后在Windows资源管理器中或命令提示符中轻松删除X:\folder to be deleted。要删除临时驱动器的别名,可以使用命令

subst x: /d
```来删除。
22
22
22
2011-04-22 16:00:01 +0000

只需在Powershell中运行下面的命令即可。

Cmd /C "rmdir /S /Q <dir>"
18
18
18
2015-06-25 14:19:53 +0000

Dentrasi的解决方案](https://superuser.com/a/78458/10407)对我来说是最有效的,但我想把具体的步骤贴在上面的答案中。下载并安装最新的稳定版的 7zip 。运行7zip文件管理器(7zfm.exe)。 3. 在 7zip 檔案管理員中,導航,讓你可以看到你要刪除的資料夾名稱 (也就是你在父資料夾中)。6. 单击"OK“按钮; **确认您仍然按住Shift键*。

12
12
12
2016-09-09 10:52:17 +0000

有两点是现有答案中没有提到的

  1. 你可以使用扩展长度路径前缀来访问长路径
  2. 在Windows 10中,你可以启用长路径支持一般使用–不过注意,不是所有的应用程序都能使用长路径,你应该测试一下旧的软件。

长路径前缀

Windows API有一个特殊的功能,支持最长32k字符的Unicode路径名(每个元素的长度不超过255个字符)。

这通常会被误认为是UNC命名,但其实不然,尽管它是相关的。

用来告诉API使用长的Unicode路径的前缀是`\?有两点是现有答案中没有提到的

  1. 你可以使用扩展长度路径前缀来访问长路径
  2. 在Windows 10中,你可以启用长路径支持一般使用–不过注意,不是所有的应用程序都能使用长路径,你应该测试一下旧的软件。

长路径前缀

Windows API有一个特殊的功能,支持最长32k字符的Unicode路径名(每个元素的长度不超过255个字符)。

这通常会被误认为是UNC命名,但其实不然,尽管它是相关的。

用来告诉API使用长的Unicode路径的前缀是,如:

\?\D:\very long path

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,你可以通过组策略编辑器激活它。或者你可以简单地使用下面的注册表更改。一如既往,在做任何事情之前,请先备份你要更改的注册表部分。

  1. 运行regedit.exe
  2. 确认UAC提示。
  3. 导航到密钥:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{48981759-12F2-42A6-A048-028B3973495F}Machine\System\CurrentControlSet\Policies
  4. 5.如果不存在,右键点击策略,从菜单中选择新的> Dword(32位)值。这应该包括 Windows Store 应用程序。

参考。https://blogs.msdn.microsoft.com/jeremykuhne/2016/07/30/net-4-6-2-and-long-paths-on-windows-10/

UPDATE 2017-04-09

@maoizm指出了上面的注册表键的一个问题,所以我做了再挖掘一下。看起来你现在可以用系统键设置长文件名支持:

HKLM\SYSTEM\CurrentControlSet\Control\FileSystem LongPathsEnabled (Type: REG_DWORD)

&001

这仍然只适用于被特别设置为使用它的应用程序(需要在应用程序的manifest.xml中输入一个条目)。

8
8
8
2014-10-28 05:52:15 +0000

我喜欢cmd的解决方案。虽然我想分享另一个在资源管理器中也可以使用的变通方法:在删除之前,试着缩短父文件夹的名称:较短的名称会缩短路径。比如说,你有这样的文件夹树状结构:

C:\002

….项目

….。2014年春天的一些真棒项目

…………。在市内公园的一些活动

…………。 实际文件的名字也很长

在这种情况下,你不能删除文件夹,也不能删除或重命名文件。如果你想删除整个文件夹结构或部分文件夹,可以暂时重命名父文件夹并缩短路径,然后再删除文件夹。 实际文件的长名也是

在我的情况下,我只想删除整个文件夹中的许多子文件夹和文件。所以我并不关心文件夹的名字。

7
7
7
2016-01-11 14:22:54 +0000

7-zip方案很好用。如果你安装了git,另一个选择是打开一个bash shell,然后使用:

rm -f

(或rm -rf代表文件夹)

4
4
4
2014-04-29 15:47:23 +0000

我建议使用Total Commander(共享软件,但在试用期后仍能正常工作,只有极小的启动画面)。这是我一直以来解决长文件名问题的方法。

2
2
2
2015-02-08 21:07:55 +0000

我创建了一个简单的java程序,使用robocopy来删除文件。这个jar是一个可运行的程序。 https://drive.google.com/file/d/0B5pSEjxJvt_1WVp1T3puSm1CNjg/view?usp=sharing

2
2
2
2010-11-06 16:24:27 +0000

你也可以用它们的等效的简称来删除它们,dir /x会告诉你它们。

1
1
1
2013-12-20 06:10:00 +0000

我遇到了delinfile,效果很好,而且相当快!

它的试用期是限制在3个动作/15天,但如果你只想删除几个文件夹/文件,它是可以使用的:

&004

1
1
1
2017-10-28 00:35:26 +0000

在这里得到了完美的答案(针对文件)。

REM Make sure there is no \ at the end of either path!
robocopy "C:\...\...\...\long\path" "C:\DeleteMe" "FileName" /MOV
REM Note: this ^ can be called many times before...:

REM Finally, recursively delete the higher up DeleteMe directory.
rmdir /S /Q DeleteMe

另见。https://msdn.microsoft.com/en-us/library/aa365247.aspx#maxpath

4个问题中没有一个备选答案能满足我的需求。欢迎你的世界。

1
1
1
2017-01-09 12:08:22 +0000
  • 大目录 - [下载]
  • 下载
  • 使用递归调用 RemoveDirectoryW 来删除现有的目录
  • 使用自己的文件库来删除新创建的目录
  • 在删除连接的目录之前,文件可以从目录中移动。
  • 速度快,虽然导航到目录顶部需要点击每一个嵌套的目录
  • Windows XP(SP3)及以上版本
  • 没有安装程序的未签名的未管理代码,所以当从备用文件夹(如桌面)运行时,可能会有Smartscreen警告。
1
1
1
2017-06-13 07:52:13 +0000

我在Windows 10中遇到了这个问题,找到了这个简单的解决办法。进入文件夹树的更深处。 2. 使用地址栏将文件夹从树中间的某处拖放到树的某处开始。就像我的图片一样,把红色框拖到绿色框中。这种情况下,路径比较短,但对于长路径也可以) 4. 然后你的路径变得更短,然后用删除键删除。

0
0
0
2015-06-25 16:47:36 +0000

我终于知道如何通过Powershell来实现这个功能了。以下是我在Windows 7上的操作说明:

  1. 在文件夹C:Users\Documents\WindowsPowerShell\Modules\NTFSSecurity中创建一个新的文件夹,名为NTFSSecurity,其中XXXX是你的Windows用户名。例如: 如果我的用户名是 “aspnyc”, 新的文件夹将是C:Users/aspnyc/Documents/WindowsPowerShell/Modules/NTFSSecurity. 下载文件系统安全PowerShell模块包 - 它应该是一个简单的ZIP文件。開啟 Powershell 控制台,執行 **Get-Module -ListAvailable,並確保 *NTFSSecurity** 在註冊模組清單中顯示。 5.在Powershell控制台中,运行Remove-Item2 “YYYYYY” -Recurse ,其中YYYYY是你要递归删除的文件夹的Windows路径(例如:C:Potatoes\Badgers\FolderToDelete)。
0
0
0
2015-10-09 16:08:22 +0000

我终于知道了如何在Windows 10上用Powershell来实现这个功能了,在Windows 10上个别文件名太长。以下是我在Windows 10上的操作步骤:

  1. 下载 文件系统安全PowerShell模块包 - 它应该是一个简单的ZIP文件。将ZIP文件解压为NTFSSecurity文件夹,在C:\WINDOWS系统32\WindowsPowerShell\v1.0\Modules目录下。開啟一個Powershell控制台,用管理模式(又名管理模式),並執行Get-Module -ListAvailable,並確保NTFSSecurity顯示在註冊模組清單中。运行Set-ExecutionPolicy Unrestricted来绕过签名执行模式。你必须用Y(es)确认这个操作 5.最终cd到你要删除的文件夹。 6.在Powershell控制台中,运行Import-Module NTFSSecurity。在Powershell控制台中,运行Remove-Item2 “YYYYYY” -Recurse ,其中YYYYY是你要递归删除的文件夹的相对或绝对路径(例如:C:Potatoes/Badgers/FolderToDelete_)。检查是否成功。
  2. 最终用Set-ExecutionPolicy Restricted设置回签名执行模式。你必须用Y(es)确认这个操作。
0
0
0
2019-07-16 21:25:40 +0000

导航到WinRAR中的目录,选择文件,按F2键,将文件重命名为一个较短的名字。然后就可以像往常一样删除该文件。https://www.youtube.com/watch?v=qQTyTprFAOg

0
0
0
2017-07-05 10:44:55 +0000

如果你在Windows上安装了Ubuntu上的Bash,你可以在普通命令提示符中cd到父目录,然后键入:

bash -c "rm -rf dirname_here"

,启动bash,从linux中递归地删除没有文件名限制的目录,然后退出到普通命令提示符。