Powershell Can';t在Windows 7上删除带有尾随空格的文件夹

Powershell Can';t在Windows 7上删除带有尾随空格的文件夹,powershell,windows-7,cmd,explorer,delete-directory,Powershell,Windows 7,Cmd,Explorer,Delete Directory,问题:我有一个Windows7子目录,无法删除 虽然我知道这里的其他人,以及互联网上其他地方的许多人都询问过这类Windows7文件系统的一般问题,但我在这里的问题具体涉及Windows7上的特定类别的不可删除文件,这些文件在目录名中有一个尾随空格。 是否有更好的工具来检查和/或编辑我的文件系统(如果需要,使用十六进制) 操作系统:我正在运行x64 professional,它已经完全更新 尝试的内容:我已经阅读了许多关于这个主题的网页,并尝试了许多潜在的解决方案。我最近一直在使用PowerS

问题:我有一个Windows7子目录,无法删除

虽然我知道这里的其他人,以及互联网上其他地方的许多人都询问过这类Windows7文件系统的一般问题,但我在这里的问题具体涉及Windows7上的特定类别的不可删除文件,这些文件在目录名中有一个尾随空格。

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


操作系统:我正在运行x64 professional,它已经完全更新

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

它不是由什么引起的:

  • 长文件名,或
  • 位于一条长长的小路上
不固定的内容:

  • 使用旧的DOS文件命名方案重命名
  • 运行整个文件系统
  • 正在关闭可能正在访问它的所有其他程序
  • 禁用病毒软件
  • 使用Delinvfile.exe 4.5实用程序。注意:DelenvFile表示无法修复“短名称中包含无效字符的文件和文件夹。这些字符包括[文件名中不允许的]:
如果我试图在cmd窗口中通过键入'del“2'+tab来删除它,它将完成文件名扩展,如下所示:del“20120530-04”,表明目录名末尾有一个空格。当我执行此命令时,结果是:

找不到C:\holds bad子目录\20120530-04

如果我尝试用del2*删除它,系统会返回,好像它已经删除了它,但没有

如果我在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
这有点奇怪,因为目录可以清楚地看到它,但任何方法显然要么看不到它,要么无法应用于它

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

此外,如果我查看此文件夹的属性,我可以看到名称为“20120530-04”,也就是说,末尾有一个额外的空间

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

它不是只读的,也不是隐藏的


问题范围:现在,这不是一个大问题,很容易将此子目录隐藏在一个偏僻的子目录中,而不必担心它

但对我来说,这已经变成了一个智力上的挑战,并且在一定程度上是一种了解Windows7本质的方式。我想我很惊讶Windows中这样一个bug能够以如此低的级别存在,而且世界上安装了如此多的系统。现在很难知道这是一个Windows错误、错误数据(错误泄漏的数据)还是错误数据。

您尝试过吗

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

rd/s“C:\holds bad subdir”


你说你试过删除文件,但是你没有提到rd或者它的同义词rmdir,它会删除目录。

我有一些建议

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

Get-ChildItem 2012* | % { Remove-Item -LiteralPath $_.FullName -Force }
方法2: 您可以尝试对文件夹使用shortname()。这是一种
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
如果此操作不返回任何内容,请尝试在文件名末尾添加空格。如果返回对象,请运行:

$fold.Delete()
如果它没有返回一个对象,在末尾有空格和没有空格,请使用通配符尝试以下方法(这可能需要1-15分钟的时间运行)

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

$fold.Delete()

启动一个实时的Linux Ubuntu光盘,看看文件管理器是如何运行的

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

根据(需要显示JavaScript),下面应该可以工作(注意它使用了路径)

请确保使用cmd.exe执行此操作。它似乎不适用于PowerShell(rd)

另见:


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

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

(当您在那里时,尝试将%~si“作为目标也不会有什么坏处…

是的,谢谢。在PowerShell中也是一样的:删除项,“大纲删除文件和文件夹”。我想知道所谓的空格是否真的是某种奇怪的(unicode?)字符。也许一个
DIR>textfile
会对一个十六进制编辑器显示更多信息?我的问题完全一样,只是有一个小细节:我甚至不能移动文件夹。接受的解决方案中的命令最终将其删除。最初,该文件夹是由WinRAR创建的,但意外地得到了额外的空间。再次感谢您,但很抱歉,此操作失败。返回的结果是:第1of2行:C:\holds bad SUDIR>rd/s/q“20120530-04”,第2OF2行:系统找不到指定的文件。C:\holds bad subdir>我刚刚在Win2008 R2上遇到了同样的问题。我使用一个提升的CMD shell解决了这个问题,并执行了DIR*/X,这也列出了旧的文件命名约定。有两个子文件夹,“w”
$fold.Delete()
#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()
rd "\\?\C:\holds bad subdir\20120530-04 "
for /f "delims=" %i in ('dir /b /ad') do rd /s /q "%i"