Удалить файл, содержащий недопустимые символы в окнах

16

У меня есть несколько файлов, которые содержат двоеточие в имени файла (например, 1d67c0d23e859ed4a259749e4a720d9e: default-sink). Когда я пытаюсь удалить их из командной строки с помощью команды:

c:\backup> del /F *.*

Я получаю «Система не может найти указанный файл». для каждого файла. Если я укажу отдельный файл:

c:\backup> del /F "1d67c0d23e859ed4a259749e4a720d9e:default-sink"

Я получаю «Неверный синтаксис имени файла, имени каталога или метки тома». Если я пытаюсь использовать rd в родительской папке, я получаю

Как я могу удалить эти файлы?

Grom
источник
2
Эти файлы были созданы в разделе NTFS, когда я загрузился в Linux. Думаю, мне придется использовать загрузочный диск Linux, так как кажется, что windows не любит двоеточие в именах файлов на уровне драйвера файловой системы.
2010 года
Связанный: superuser.com/q/31587/320611
Дэвид Рефуа

Ответы:

22

Существует статья Microsoft KB, в которой перечислены возможные способы удаления таких файлов:

http://support.microsoft.com/kb/320081

Обычно я использую собственный метод API:

del "\\?\c:\path\1d67c0d23e859ed4a259749e4a720d9e:default-sink"

В соответствии с:

http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx

Это :зарезервированный символ в NTFS, рекомендованный способ удаления таких файлов является родным методом API, о котором я упоминал выше.

Ausmith1
источник
4
Это не работает для двоеточия, так как интерпретируется как именованный поток данных.
psusi
Это сработало для моего случая. файл, с которым у меня возникла проблема, содержал запятую,
Maher Fattouh
Спасибо, это сработало для меня. Файл закончился за период. CA848D8F.
Мастро
1
Не работает Мое имя файла содержит обратную косую черту.
Pacerier
Если имя файла содержит :то, о чем спрашивал OP, этот метод не работает. Используйте chkdskили удалите его из живого Linux.
Сурав Гош
15

Я думаю, вы можете попробовать название 8.3?

del /F 1d67c0~1

Обратите внимание, что на дисках NTFS вы можете явно отключить функциональность 8.3, поэтому в этом случае вам не повезло с этой опцией. Чтобы получить имя файла dir adir /x

Раньше был бесплатный инструмент под названием, delinvfileно они пошли и изменили его на shareware / paid

Марк Хендерсон
источник
Как я могу сделать это на томе NTFS, созданном с помощью formatкоманды с отключенной поддержкой имен 8.3?
user2284570
1
@ user2284570 этот метод не будет работать. Когда я писал этот ответ, в Microsoft было включено 8,3 имени, но в настоящее время оно отключено по умолчанию.
Марк Хендерсон
@MarkHenderson, мое имя файла 7:2. Как использовать имя 8.3 для имени файла 7:2?
Pacerier
@Pacerier смотрите мой предыдущий комментарий. Этот метод не будет работать на современных операционных системах. Windows XP или старше.
Марк Хендерсон
13

Это сработало для меня:

  1. Ран chkdsk /f
  2. Перезагрузка ПК
  3. Тогда я смог выбрать и удалить файл
Johnb
источник
4

Закройте все файлы, если они открыты, которые сохранены на диске, который содержит такие файлы. Теперь откройте свойства диска.

«Мой компьютер» -> «Щелкните правой кнопкой мыши на этом диске»> Свойства

Затем перейдите на вкладку « Инструменты » и нажмите « Проверить сейчас » под меткой « Проверка ошибок».

введите описание изображения здесьНажмите здесь для увеличения изображения

Это размонтирует ваш диск и проверит весь диск на наличие ошибок, в конечном итоге удалит такие файлы с недопустимыми именами. По окончании будет показано сообщение о том, что некоторые файлы были исправлены.

Я успешно удалил такие файлы с моего внешнего жесткого диска.

Атул Вайбхав
источник
3

У меня есть подсистемы для UNIX-приложений , установленных на моем компьютере (Windows 7). Из оболочки Windows я могу создать файл touch 1d67c0d23e859ed4a259749e4a720d9e:default-sink, а затем удалить егоrm *:*

Джо Интернет
источник
POSIX-совместимые утилиты (такие как SFU) могут удалять такие файлы.
Ausmith1
@JoeInternet: sigghh Microsoft удалила все подсистемы не Windows с 2012 года и выше.
user2284570
... но подсистема unix снова вернулась в win 10.
user165568
1

Попробуйте переименовать родительскую папку в один символ (a, 1 и т. Д.), А затем попытайтесь удалить родительскую папку. Если это не работает, перейдите к первой дочерней папке, переименуйте ее в один символ и повторите попытку удаления. Я часто использую этот метод для файлов с недопустимыми символами (не спрашивайте меня, как они создаются, потому что я не знаю) или для файлов, где путь превышает максимум (опять же, не спрашивайте, как это происходит).

joeqwerty
источник
1

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

Dentrasi
источник
Это потому, что 7-zip используют Cygwin.
user2284570
1
Не работает для обоих моих файлов. Первый файл имеет имя файла с обратной косой чертой, а второй файл имеет имя файла с двоеточием.
Pacerier
Нет, это потому, что 7-zip использует Windows API вместо оболочки. Он имеет те же ограничения, что и API: он считает, что двоеточия указывают на потоки.
user165568
У меня 7zip работал
user1278519
1

У меня есть система двойной загрузки, и ни один из приведенных выше ответов не сработал для меня. Если файл находится на диске, который смонтирован вашей другой ОС (для меня Ubuntu 16.04 LTS), вы можете просто удалить его, используя другую ОС;)

Анг черный
источник
Это довольно разумно, когда в связке (хотя это не может быть сделано для онлайн-машины). Кроме того, встроенная двойная загрузка не требуется, так как для этого мы можем загрузить живой дистрибутив, такой как установочный диск Fedora или Knoppix. ОДНАКО следует быть осторожным, когда в такой среде, как эта, драйвер NTFS3G, который мы используем для монтирования этой системы, не будет учитывать большинство разрешений / ACL Windows (именно поэтому он так эффективен при избавлении от «зависших» файлов). ,
Спулер
0

Вы пытались процитировать имена файлов? Дать точную команду, которую вы выполняете, было бы удобно.

ombble
источник
Я добавил это к точной команде, которую я бегу, чтобы подвергнуть сомнению.
Grom
0

Вы пытались использовать подстановочный знак? Например, «del 1d67c0d23e859ed4a259749e4a720d9e *. *» Может работать.

Майкл Кохне
источник
Вы попробовали подстановочные знаки. Не повезло
Гром
1
Следующая вещь, о которой я думаю, - это загрузить систему с компакт-диска linux (например, system rescue cd), смонтировать том и попробовать удалить его оттуда. В этот момент вы можете получить интересные результаты, например, кто знает, что на самом деле происходит в файловой системе.
Майкл Кохн
@MichaelKohne: Я думаю, что использование реализации пути Unix также является правильным решением. Но зачем использовать Linux? Windows запускается как подсистема NT, и уже есть подсистема POSIX / Unix NT.
user2284570
1
@ user2284570 - потому что, учитывая тот факт, что они были созданы с Linux, вполне вероятно, что драйвер NTFS для linux допускает то, чего у него не должно быть, что даже оболочка Windows POSIX может не проскользнуть мимо драйвера файловой системы. Намного проще загрузить live linux CD, удалить поддельный файл и перезагрузиться обратно в Windows.
Майкл Кохне
@MichaelKohne: Нет, поскольку пути UNC уже работают (собственная подсистема) , а с подсистемами POSIX нет прямого доступа к альтернативным потокам данных, поэтому вы можете использовать их :внутри файлов.
user2284570
0

Вы пробовали dir / X узнать фактическое имя 8.3, а затем пытались удалить это имя?

Или этот файл может иметь альтернативный поток данных? Возможно, вы захотите взглянуть на него, пока инструмент на http://www.nirsoft.net/utils/alternate_data_streams.html, чтобы увидеть, что это может вам сказать (я никогда не использовал этот инструмент, он просто появился, когда я искал) ,

Майкл Кохне
источник
0

У меня была папка с запятой в имени. Я попробовал несколько из вышеперечисленных предложений и не смог заставить их работать.

Мне удалось удалить папки с Cygwin. Установка этого приложения не для всех, но это сделает работу.

Рич Макдональд
источник
0

Ни одно из вышеперечисленных предложений не сработало для меня. Я использовал WinRar. Откройте winrar, и вы увидите список файлов, в котором вы обнаружите подозрительный файл «filename» (который был создан вами как «filename: some_text.txt». Переименуйте файл в Winrar и укажите его расширение (например, .txt или .doc).

Вернитесь в Windows Explorer, вы увидите «имя файла .txt» (или документ). Удалите это оттуда.

Прашант Ламба
источник