Не могу удалить папку в Windows 7 с пробелом [закрыт]
вопрос: у меня есть подкаталог Windows 7, который я не могу удалить.
в то время как я знаю других здесь, и многие другие в интернете задали вопрос об этом общем классе проблемы файловой системы Windows 7, мой вопрос здесь конкретно относится к конкретному классу не удаляемых файлов в Windows 7, которые имеют пробел в имени каталога.
есть ли лучший инструмент для проверки и / или редактирования моей файловой системы (в hex, если нужно быть)?
OS: я запускаю x64 professional, и он полностью обновлен.
что было попробовано: Я прочитал много веб-страниц по этому вопросу и попробовал много потенциальных решений. Я изучал проблему совсем недавно с помощью PowerShell, который, похоже, полностью способен иметь дело с внутренними системами. На данный момент я ищу что-то вроде HEX-редактор файловой системы.
что это не вызвало by:
- длинное имя файла, или
- находясь в длинном пути,
что это не закреплено:
- переименование с использованием старой схемы именования файлов DOS
- под управлением программы chkdsk всей файловой системы
- завершение работы всех других программ, которые могут иметь к нему доступ
- отключение антивирусного программного обеспечения
- использование Delinvfile.исполняемый 4.5 полезности. Примечание: Delinvfile говорит, что он не может исправить "файлы и папки с коротким именем, содержащим недопустимые символы. К ним относятся символы [которые запрещены в именах файлов]:
< - Less than symbol > - Greater than symbol : - Colon " - Quotation Mark / - Forward Slash | - Vertical Bar ? - Question mark * - Asterisk
чем это вызвано? в моем случае un-deletable подкаталог был создан несколько месяцев назад с пользовательским PHP программа, которую я использую для резервного копирования исходного дерева. Похоже, либо пробел или другой плохой персонаж имя, но я не уверен. Он отображается в каталоге файлов, но недоступен для удаления, переименования, rmdir и т. д.
следствие: Я могу переместить его в своей файловой системе и поместить его в подкаталог под названием "держит плохой поддир" на C:.
здесь вы можете увидеть с 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 subdir20120530-04
если я попытаюсь удалить его с помощью del 2*, система вернется, как если бы она удалила его, но не делает.
если я сделаю эту же команду в PowerShell, а также с Force
опция, она сообщает: "объект по указанному пути C:holds bad subdir20120530-04 не существует."следующим образом:
PS C:holds bad subdir> Remove-Item 2* -Force Remove-Item : An object at the specified path C:holds bad subdir120530-04 does not exist.At line:1 char:1
+ Remove-Item 2* -Force
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Remove-Item], PSArgumentException
+ FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.RemoveItemCommand
это странно, потому что каталог может ясно видеть его, но любые методы, по-видимому, либо не могут видеть его, либо не могут быть применены к нему.
Я также могу просмотреть un-deletable подкаталог в Проводник Windows. Когда я просматриваю его, он говорит:"эта папка пуста". И если я попытаюсь удалить его там, я получить:
также, если я просматриваю свойства этой папки я вижу, что имя "20120530-04", то есть с дополнительным пространством в конце.
также интересно, что вкладка "Безопасность" сообщает " (X) запрошенная информация о безопасности либо недоступна, либо не может быть отображена."
и это не только для чтения, ни скрытых.
объем выпуска: теперь это не большая проблема, это легко похоронить этот подкаталог внутри вне пути подкаталога и просто не беспокоиться об этом.
но для меня это превратилось в интеллектуальный вызов и отчасти способ узнать больше о внутренностях ОС Windows 7. Наверное, я удивлен, что такая ошибка в Windows может существовать на таком низком уровне и с таким количеством систем, установленных в мире. На данный момент трудно понять, является ли это ошибкой Windows, плохими данными (что ошибка позволила) или просто плохой данные.
5 ответов
по данным вы не можете удалить файл или папку на томе файловой системы NTFS (требуется JavaScript для отображения), должно работать следующее (обратите внимание, что он использует UNC путь).
rd "\?\C:\holds bad subdir120530-04 "
обязательно сделайте это с помощью cmd.исполняемый. Кажется, он не работает с PowerShell Удалить-Пункт (rd).
Смотрите также:
у меня есть несколько предложений.
Способ 1:
Значение по умолчанию Path
параметр в командлетах, как известно, имеет проблемы со специальными символами. LiteralPath
однако должен поддерживать все символы и часто решает такие проблемы, как у вас есть.
Get-ChildItem 2012* | % { Remove-Item -LiteralPath $_.FullName -Force }
Способ 2:
Вы можете попробовать использовать shortname (8.3 именем) для папки. Это 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
Способ 3: Вы также можете увидеть, если 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()
вы пробовали
rd "C:\holds bad subdir120530-04 "
или
rd / s "C:\holds bad subdir"
вы говорите, что пробовали del
что удаленные файлы, но вы не упомянули rd
или его синоним rmdir
который удаляет каталоги.
загрузите Live Linux Ubuntu CDROM и посмотрите, как работает этот файловый менеджер.
Windows не должна поддерживать конечные пробелы, но поддерживает ведущие пробелы.
из родительского каталога сделайте следующее, надеясь обмануть любой полезный перевод CMD
делаем:
for /f "delims=" %i in ('dir /b /ad') do rd /s /q "%i"
(пока вы там, не помешает попробовать "%~si"
как цель...)