Подтвердить что ты не робот

Не удается удалить папку в Windows 7 с конечным пространством

Проблема: У меня есть подкаталог Windows 7, который я не могу удалить.

В то время как я знаю других здесь, и многие другие в Интернете спрашивают об этом общем классе проблем с файловой системой Windows 7, мой вопрос здесь конкретно относится к определенному классу не подлежащих удалению файлов в Windows 7, которые имеют конечное пространство в имени каталога.

Есть ли лучший инструмент для проверки и/или редактирования моей файловой системы (в случае необходимости в шестнадцатеричном формате)?


ОС: Я запускаю x64 professional и полностью обновляюсь.

Что было опробовано: Я прочитал много веб-страниц на эту тему и попробовал много потенциальных решений. Недавно я изучил проблему с помощью 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 и т.д.

Исследование: Я могу переместить его в свою файловую систему и поместил его в подкаталог, называемый "hold bad subdir" на 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 "+", он завершит расширение имени файла следующим образом: del "20120530-04", показывая, что в конце имя каталога. Когда я выполняю эту команду, результат:

Не удалось найти C:\has bad subdir\20120530-04

Если я попытаюсь удалить его с помощью del 2 *, система вернется, как если бы она удалила его, но не делает.

Если я выдаю эту же команду в PowerShell, а также с опцией Force, она сообщает: "Объект по указанному пути C:\has 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. Когда я просматриваю его, он говорит: "Эта папка пуста". И если я попытаюсь удалить его там, я получаю:

Enter image description here

Также, если я просматриваю свойства этой папки, я вижу, что это имя "20120530-04", то есть с дополнительным пространством в конце.

Enter image description here

Также интересно, что вкладка "Безопасность" сообщает "(X) Запрошенная информация о безопасности либо недоступна, либо не отображается".

И это не только для чтения, но и для скрытых.


Сфера действия проблемы:. Теперь это не большая проблема, ее похоронить в подкаталог, находящийся в внедорожнике, просто нет, и просто не беспокойтесь об этом.

Но для меня это превратилось в интеллектуальный вызов и отчасти способ узнать больше о кистях Windows 7. Наверное, я удивлен, что такая ошибка в Windows может существовать на таком низком уровне и с таким количеством систем, установленных в мире. В этот момент трудно узнать, является ли это ошибкой Windows, плохими данными (что приводит к ошибке) или просто плохими данными.

4b9b3361

Ответ 1

В соответствии с Вы не можете удалить файл или папку на томе файловой системы NTFS (требуется JavaScript для отображения), следующее должно работать ( обратите внимание, что он использует путь UNC.

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

Обязательно сделайте это с помощью cmd.exe. Кажется, он не работает с PowerShell Remove-Item (rd).

Также смотрите:

Ответ 2

У меня есть несколько предложений.

Метод 1: Известно, что параметр Path по умолчанию в командлетах имеет проблемы со специальными символами. LiteralPath однако должен поддерживать всех персонажей и часто решает проблемы, подобные тем, которые у вас есть.

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

Метод 2: Вы можете попытаться использовать короткое имя (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

Метод 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()

Если он не возвращает объект как с пространством в конце, так и без него, попробуйте следующий apporach, используя подстановочный знак (это может занять от 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()

Ответ 3

Вы пробовали

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

или

rd/s "C:\has bad subdir"

Вы говорите, что вы пробовали del удаленные файлы, но вы не упоминали rd или его синоним rmdir, который удаляет каталоги.

Ответ 4

Загрузите CD-ROM Live Linux Ubuntu и посмотрите, как идет этот файловый менеджер.

Windows не должна поддерживать конечные пробелы, но поддерживает ведущие пробелы.

Ответ 5

Из родительского каталога выполните следующие действия, надеясь обмануть любой полезный перевод CMD:

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

(Пока вы там, не помешало бы попробовать "%~si" в качестве цели тоже...)