3

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

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

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

6 ответов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, вместо этого вы открываете родительскую папку файла. В этой ситуации, если вы попытаетесь изменить настройки безопасности для этих файлов, вы либо не сможете сделать это, либо неожиданно измените настройки для других файлов. Если это происходит, вы можете подумать, что у вас есть разрешение на файл, который на самом деле имеет ограниченный ACL.

2

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

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

Загрузитесь с 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

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

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

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

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

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

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

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

0

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

0

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

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

-1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .