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