Файлы с недопустимыми именами файлов

7270
Josh

Возможное дублирование:
как заставить Windows XP переименовать файл со специальным символом?

У меня есть несколько файлов, имена которых имеют такие символы, как "?" и ":", которые запрещены окнами. Я не уверен, как им удалось попасть туда с этими именами, так как я не могу вручную создавать файлы с этими именами. Они восстанавливаются с диска HFS, но инструмент, который их восстановил, работал под Windows, и поэтому, я думаю, он должен был подвергаться тем же ограничениям при их создании.

Во всяком случае ... теперь, когда они здесь, я могу открыть их, но я не могу переместить, скопировать, переименовать или удалить их. Я хочу удалить несколько из них, но большинство я хочу сохранить и скопировать на другой диск. Как я могу пойти по этому поводу?

3
похоже, возможно дубликаты: http://superuser.com/questions/31587/how-to-force-windows-xp-to-rename-a-file-with-a-special-character и http://superuser.com / вопросы / 49679 /, как к партии переименованию-файлы, скопированные из-OSX-на-окон-с-в-имен файлов quack quixote 14 лет назад 1

6 ответов на вопрос

5

Вы не можете удалить файл или папку на томе файловой системы NTFS.

Причина 5: имя файла содержит зарезервированное имя в пространстве имен Win32. Если имя файла включает зарезервированное имя (например, «lpt1») в пространстве имен Win32, возможно, вы не сможете удалить файл. Чтобы решить эту проблему, используйте не-Win32 программу для переименования файла. Вы можете использовать инструмент POSIX или любой другой инструмент, который использует соответствующий внутренний синтаксис для использования файла.

Кроме того, вы можете использовать некоторые встроенные команды для обхода типичных проверок зарезервированных имен Win32, если вы используете определенный синтаксис для указания пути к файлу. Например, если вы используете команду Del в Windows XP, вы можете удалить файл с именем «lpt1», если вы укажете полный путь к файлу, используя следующий специальный синтаксис:

del \\?\c:\path_to_file\lpt1 

Для получения дополнительной информации об удалении файлов с зарезервированными именами в Windows NT и Windows 2000 щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:

120716 Как удалить файлы с зарезервированными именами в Windows

Для получения дополнительных сведений об удалении файлов с зарезервированными именами в Windows XP щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:

315226 Как удалить файлы с зарезервированными именами в Windows XP

Если вы открываете дескриптор файла с помощью типичного механизма Win32 CreateFile, определенные имена файлов зарезервированы для устройств DOS старого стиля. Для обратной совместимости эти имена файлов не разрешены, и их нельзя создать с помощью типичных вызовов файлов Win32. Однако эта проблема не является ограничением NTFS.

Вы можете использовать программу Win32 для обхода типичных проверок имен, которые выполняются при создании (или удалении) файла, используя ту же технику, что вы используете для обхода папок глубже, чем MAX_PATH. Кроме того, некоторые инструменты POSIX не подлежат проверке имен.

Причина 6: имя файла содержит недопустимое имя в пространстве имен Win32. Возможно, вы не сможете удалить файл, если имя файла содержит недопустимое имя (например, имя файла содержит завершающий пробел или завершающий период или файл имя состоит только из пробела). Чтобы решить эту проблему, используйте инструмент, который использует соответствующий внутренний синтаксис для удаления файла. Вы можете использовать синтаксис "\? \" С некоторыми инструментами для работы с этими файлами, например:

del "\\?\c:\path_to_file_that contains a trailing space.txt " 

Причина этой проблемы похожа на причину 4. Однако, если вы используете типичный синтаксис Win32 для открытия файла, у которого в конце есть конечные пробелы или конечные периоды, конечные пробелы или периоды удаляются перед открытием фактического файла. Поэтому, если у вас есть два файла в одной папке с именами «AFile.txt» и «AFile.txt» (обратите внимание на пробел после имени файла), если вы пытаетесь открыть второй файл с помощью стандартных вызовов Win32, вы открываете первый файл вместо Аналогично, если у вас есть файл с именем «» (пробел), и вы пытаетесь открыть его с помощью стандартных вызовов Win32, вместо этого вы открываете родительскую папку файла. В этой ситуации, если вы попытаетесь изменить настройки безопасности для этих файлов, вы либо не сможете сделать это, либо неожиданно измените настройки для других файлов.

К сожалению, ни одна из этих причин (ни другие, описанные в связанной статье) точно не описывают это условие. Я попробовал технику "\\? \". Я также попытался использовать «rm» и «mv» из cygwin, которые, как я полагаю, попадают в категорию «не-Win32 программ». Никто из них не работал. Josh 14 лет назад 0
есть MacNames (но 169 долларов - довольно крутая цена :) http://peccatte.karefil.com/software/MacNames/MacNamesEN.htm 14 лет назад 0
@josh: cygwin подпадает под категорию «программ win32»; он переводит системные вызовы Unix, которые используются `rm` и` mv`, в эквиваленты win32. quack quixote 14 лет назад 0
2
quack quixote

Из моего ответа на аналогичный вопрос :

Отказоустойчивый метод :

Загрузитесь с Linux LiveCD. Ubuntu имеет хорошую поддержку NTFS, и Linux обрабатывает гораздо больше шатких символов в именах файлов, чем Windows. Сценарий perl rename может быть включен в качестве системной renameкоманды, что удобно для пакетного изменения многих файлов с одинаковыми именами.


В командной оболочке Windows с короткими именами файлов

Команда DOS DIR / X показывает короткие имена файлов, если они существуют в вашей системе .

$ cmd c:\test> dir /x Volume in drive E is NUVOL Volume Serial Number is 80D3-A96D  Directory of e:\tor\test  10/04/2009 05:15 AM <DIR> . 10/04/2009 05:15 AM <DIR> .. 10/04/2009 05:11 AM 0 CLIP-2~1.MOV clip-2009-10-01 21;26;00.mov 1 File(s) 0 bytes 2 Dir(s) 5,201,670,144 bytes free 

Если они существуют, команда REN переместит их на новое имя; новое имя может быть новым (действительным) длинным именем файла.

c:\test> ren CLIP-2~1.MOV "clip-2009-10-01_21-26-00.mov" 

Вот как это исправить.

Чтобы выполнить пакетную обработку всех этих файлов, вам необходимо: 1) получить короткие имена всех файлов, которые вы хотите переместить; 2) преобразовать ваши данные в командный файл с помощью соответствующих команд REN; и 3) запустить полученный пакетный скрипт. Если вас устраивает Perl (или sed / awk, python и т. Д.), Вы можете написать сценарий самостоятельно или создать его вручную из списка, который вы сделали в шаге 1.

Но если DIR / X не показывает короткие имена файлов, ваша система отключит их, и это решение не поможет.

0
John T

Если предложение Idigas не работает, вы всегда можете переместить их с помощью Linux LiveCD, такого как Ubuntu . Он допускает использование вопросительных знаков и двоеточий в именах файлов, поэтому он не должен иметь проблем с обработкой файлов.

Вам просто нужно сначала смонтировать диск. Если XP - ваша единственная операционная система, установленная на диске, возможно, ее можно смонтировать с диска SCSI или диска IDE /dev/sda1или в /dev/hda1зависимости от него.

для подключения диска SCSI (если работает NTFS):

mount -t ntfs-3g / dev / sda1 / mnt

смонтировать диск IDE (под управлением NTFS):

mount -t ntfs-3f / dev / hda1 / mnt

Если это том FAT32, вы можете использовать vfat в качестве типа ( -t vfat)

Возможно, мне придется прибегнуть к этому. К сожалению, многие дистрибутивы Linux, похоже, не нравятся моей коробке; Я не уверен, почему, но в прошлом мне часто приходилось много играть, чтобы заставить его загрузиться, и я не хочу повторять это снова, пока у меня не закончатся другие идеи. Josh 14 лет назад 0
Проблемы с загрузкой с компакт-диска? Вуби тебя покроет (http://wubi-installer.org/). Вы можете установить Ubuntu из Windows, а затем, когда закончите, удалите его, как обычное приложение из программ добавления / удаления! John T 14 лет назад 0
0
fluxtendu

Попробуйте Delete Doctor (бесплатное программное обеспечение) или delinvfiles (условно-бесплатное программное обеспечение, но имеют больше возможностей), чтобы удалить файл с его коротким или UNC-именем.

0
dsolimano

Я использовал Windows Services для Unix, чтобы удалить такие файлы в прошлом.

Причина, по которой такие файлы могут быть созданы, состоит в том, что Windows поддерживает POSIX, поэтому NTFS была разработана для поддержки всех функций файловых систем POSIX. Однако обычные программы Win32 / Win64, использующие обычный Windows API, не могут получить доступ к этим функциям. Вам необходимо использовать программу, написанную для нативного API или API POSIX, для создания или удаления таких файлов.

-1
Rook

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

Похожие вопросы