无法删除 Windows 7 上带有尾随空格的文件夹 [关闭]

Posted

技术标签:

【中文标题】无法删除 Windows 7 上带有尾随空格的文件夹 [关闭]【英文标题】:Can't delete a folder on Windows 7 with a trailing space [closed] 【发布时间】:2014-01-31 02:32:00 【问题描述】:

问题:我有一个无法删除的 Windows 7 子目录。

虽然我在这里认识其他人,并且 Internet 上的其他许多地方都询问过此类 Windows 7 文件系统问题,但我在这里的问题具体涉及 Windows 7 上特定类别的不可删除文件,这些文件具有 目录名称中的尾随空格。

是否有更好的工具来检查和/或编辑我的文件系统(如果需要,可以使用十六进制)?


操作系统:我正在运行 x64 专业版,它已全面更新。

已尝试过什么:我已经阅读了许多有关此主题的网页,并尝试了许多潜在的解决方案。我最近一直在使用 PowerShell 研究这个问题,它似乎完全有能力处理系统内部问题。在这一点上,我正在寻找文件系统的十六进制编辑器之类的东西。

不是什么原因造成的:

长文件名,或 位于漫长的道路上,

未解决的问题:

使用旧的 DOS 文件命名方案重命名 运行整个文件系统的CHKDSK 关闭所有其他可能正在访问它的程序 禁用病毒软件 使用 Delinvfile.exe 4.5 实用程序。注意:Delinvfile 说它无法修复,“短名称包含无效字符的文件和文件夹。这些包括字符[文件名中不允许使用]:
<  -  Less than symbol
>  -  Greater than symbol
:  -  Colon
"  -  Quotation Mark
/  -  Forward Slash
|  -  Vertical Bar
?  -  Question mark
*  -  Asterisk

是什么原因造成的? 就我而言,不可删除的子目录是几个月前使用自定义的php 程序创建的,我用于源树备份。它的名称中似乎有空格或其他不良字符,但我不能确定。在文件目录中可见,但不能删除、重命名、rmdir等。

调查:我可以在我的文件系统上移动它,并将其放置在 C: 上名为“持有错误子目录”的子目录中。

在这里你可以看到它with PowerShell。首先我用Get-ChildItem(与别名'dir'相同)显示它:

PS C:\holds bad subdir> Get-ChildItem


    Directory: C:\holds bad subdir


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
d----        1/9/2014   3:01   AM            20120530-04

如果我尝试在cmd窗口中通过输入'del "2' + tab 来删除它,它会完成文件名扩展如下:del "20120530-04",显示末尾有一个空格目录名。当我执行这个命令时,结果是:

找不到 C:\holds bad subdir\20120530-04

如果我尝试使用 del 2* 删除它,系统会返回,就好像它已经删除它一样,但没有。

如果我在 PowerShell 中发出相同的命令,并且还使用 Force 选项,它会报告“指定路径 C:\holds bad subdir\20120530-04 处的对象不存在。”,如下所示:

PS C:\holds bad subdir> Remove-Item 2* -Force  Remove-Item : An object at the specified path C:\holds bad subdir\20120530-04  does not exist.At line:1 char:1
+ Remove-Item 2* -Force
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Remove-Item], PSArgumentException
    + FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.RemoveItemCommand

这有点奇怪,因为目录可以清楚地看到它,但任何方法显然要么看不到它,要么无法应用到它。

我还可以在Windows Explorer 中查看不可删除的子目录。当我浏览它时,它说,“这个文件夹是空的”。如果我尝试在那里删除它,我会得到:

另外,如果我查看这个文件夹的properties,我可以看到名称是“20120530-04”,也就是说,末尾多了一个空格。

另外有趣的是,安全选项卡报告“(X) 请求的安全信息不可用或无法显示。”

而且它不是只读的,也不是隐藏的。


问题范围:现在,这不是什么大问题,很容易将这个子目录埋在一个偏僻的子目录中,不用担心.

但对我来说,这已经变成了一项智力挑战,部分原因是为了更多地了解 Windows 7 的内容。我想我很惊讶 Windows 中的这样一个错误可能以如此低的水平存在,而且有这么多安装在世界各地的系统。在这一点上很难知道这是一个 Windows 错误、错误数据(一个错误进入)还是只是错误数据。

【问题讨论】:

我想知道所谓的空间是否真的是一些奇怪的(unicode?)字符。也许DIR &gt;textfile 可能会向十六进制编辑器显示更多信息? 我的问题完全一样,除了一个小细节:我什至无法移动文件夹。来自已接受解决方案的命令最终将其删除。本来这个文件夹是WinRAR创建的,结果不小心多了多余的空间。 【参考方案1】:

根据 You cannot delete a file or a folder on an NTFS file system volume (需要 javascript 显示),以下应该可以工作(注意它使用 UNC 路径)。

rd "\\?\C:\holds bad subdir\20120530-04 "

请务必使用 cmd.exe 执行此操作。它似乎不适用于 PowerShell 的 Remove-Item (rd)。

另见:

How to delete a folder containing trailing spaces Rename/delete Windows (x64) folder with leading and trailing space.

【讨论】:

拉尔斯干得好。你是个天才。我不会想到使用网络路径。我欠你一个人情。 ..尽管微软网页警告说这个解决方案不适用于 Win 7。这就是它所需要的,通过其他一些操作系统界面来获得这个东西。 有点尴尬我在研究这个时没有找到你引用的链接。当时我正在寻找错误的东西,并且还没有专注于它与尾随空格有关,我不太确定。我在发布后更改了标题作为事后的想法,以更好地描述问题,但随后没有使用新标题重新搜索。自我注意:一个人的谷歌搜索只与给定的关键字一样好,所以最好尝试更多的查询。 终于删除了目录。 tnx @Lars Truijens。如果有人在最​​后得到“目录不为空”作为“/s” 这对我有用,讨厌文件夹 xD 我重申此命令适用于我的情况。我曾经尝试过几个指令,但都失败了。【参考方案2】:

我有一些建议。

方法一: 已知 cmdlet 中的默认 Path 参数存在特殊字符问题。 LiteralPath 但是应该支持所有字符,并且通常可以解决您遇到的问题。

Get-ChildItem 2012* | %  Remove-Item -LiteralPath $_.FullName -Force 

方法二: 您可以尝试使用文件夹的短名称 (8.3 filename)。这是cmd.exe 方法。您还可以将这两个命令包装在 cmd /c " YOUR COMMAND " 中以在 PowerShell 中运行它们。

D:\> dir /x
 Volume in drive D is Storage
 Volume Serial Number is *******

 Directory of D:\

12.01.2014  12:29    <DIR>          APPLEI~1     Apple ios 7 GM


D:\> rd /s d:\APPLEI~1
 d:\applei~1, Are you sure (Y/N)? y

方法三: 您还可以查看WMI 方法是否有效:

#Remember to use \\ instead of \ in the path
$fold = Get-WmiObject -Query "select * from Win32_Directory where Name = 'C:\\holds bad subdir\\20120530-04'"
$fold

如果这没有返回任何内容,请尝试在文件名的末尾添加一个空格。如果它返回一个对象,运行:

$fold.Delete()

如果最后没有返回带有和不带空格的对象,请尝试使用通配符的以下方法(这可能需要 1-15 分钟才能运行)。

#Remember to use \\ instead of \ in the path
$fold = Get-WmiObject -Query "select * from Win32_Directory where Name like 'C:\\holds bad subdir\\20120530-04%'"
$fold

如果返回正确的文件夹,则将其删除:

$fold.Delete()

【讨论】:

谢谢。使用方法 1,“Get-ChildItem 2012*”在进入管道之前就失败了。而且我几乎已经尝试过方法2。你在方法 3 中失去了我,我仍在谷歌上搜索你在做什么。但事实证明,这里的另一种解决方案有效,而且由于我只有一个要删除的目录,所以我无法再次对其进行测试。不过谢谢你的帮助,Frode。 哦,伙计。谢谢你让我不要因为 -LiteralPath 的事情而发疯。【参考方案3】:

你试过了吗

rd "C:\holds bad subdir\20120530-04 "

rd /s "C:\holds bad subdir"

您说您尝试过删除文件的del,但您没有提到删除目录的rd 或其同义词rmdir

【讨论】:

好的,谢谢。在 PowerShell 中也是一样的:Remove-item, "SYNOPSIS Deletes files and folders."【参考方案4】:

启动 Live Linux Ubuntu CDROM 并查看文件管理器的运行情况。

Windows 不应该支持尾随空格,但确实支持前导空格。

【讨论】:

Ubuntu 下载完成;将安装,如果只是为了看看这一切是如何工作的。谢谢你的想法。 不要安装,从可引导的 cdrom 引导它。将 ISO 写入 cd 或创建可引导的 USB 版本。 不错。 4mb 现在对于一张 CD 来说太大了,但一个 USB 棒可以工作。谢谢。【参考方案5】:

从父目录中,执行以下操作,希望能欺骗CMD 正在做的任何有用的翻译:

for /f "delims=" %i in ('dir /b /ad') do rd /s /q "%i"

(当你在那里时,也可以尝试将"%~si" 作为目标...)

【讨论】:

再次谢谢你,但是很抱歉,这个失败了下面是返回的内容: Line 1of2: C:\holds bad subdir>rd /s /q "20120530-04 ", and line2of2: The system cannot找到指定的文件。 C:\持有错误的子目录> 我刚刚在 Win2008 R2 上遇到了同样的问题。我使用提升的 CMD shell 解决了它,并执行 DIR * /X - 它也列出了旧的文件命名约定。在同一个文件夹中有两个子文件夹,“网站”和“网站”。但是,后者想出了 WEBSIT~2 的别名,我可以使用 REN WEBSIT~2 BAD-DIR 重命名它并最终删除它。我想知道它是如何到达那里的。

以上是关于无法删除 Windows 7 上带有尾随空格的文件夹 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用正则表达式删除尾随空格?

Git 仅忽略 Markdown 文件中的尾随空格

如何递归删除所有文件的尾随空格?

如何删除除 Markdown 之外的所有文件中的尾随空格?

如何删除前导和尾随空格?

删除 JSON 键中的前导和尾随空格