2016-10-17 11 views
1

До этого момента я предположил, что в окнах запрещены все специальные символы, которые имеют значение в командной строке. Тем не менее, вполне возможно иметь файл с именем «file% sometext%»Командная строка Windows и командные файлы: потенциальные проблемы с невыпадающими специальными символами в именах файлов?

Если это имя файла вызывается в пакетном сценарии или в командной строке, пустая переменная% sometext% будет расширена до нуля, а имя файла анализируется как «файл».

Есть ли другие легитимные имена файлов, которые могут вызвать проблемы в пакетном скрипте таким образом?

+2

[Это] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247 (v = vs.85). aspx) рекомендуется прочитать. –

+0

Я действительно уже прочитал это, но спасибо. Единственное, что я могу придумать, это возрастные знаки%, так как <> "и | к счастью запрещены, а & и пробелы все еще работают в цитированных дорогах. Но мне интересно, не хватает ли я чего-нибудь –

+0

Файлы и папки, которые заканчиваются период или пространство всегда являются проблемой. –

ответ

2

Windows NT - это операционная система, которая управляет другими операционными системами. Независимо от правил, которыми управляет операционная система, работающая с файлом, применяются правила.

Это правила Windows. Программы Unix будут следовать правилам Unix. В Unix можно создать файл, который нельзя открыть в Windows и наоборот.

Имя файла Условные

Хотя каждая файловая система может иметь специфические правила формирования отдельных компонентов в имени каталога или файла, все файловые системы следуют те же общие соглашения: имя базового файла и необязательное расширение, разделенное периодом. Например, файловая система MS-DOS FAT поддерживает 8 символов для имени базового файла и 3 символа для расширения. Это называется именем файла 8.3. Файловая система FAT и NTFS поддерживают имена файлов длиной до 255 символов. Это называется длинным именем файла. Чтобы получить имя файла MS-DOS с большим именем файла, используйте функцию GetShortPathName. Чтобы получить полный путь к файлу, используйте функцию GetFullPathName.

Обе файловые системы используют символ обратной косой черты (\) для разделения имен каталогов и имени файла при формировании пути.

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

Используйте любой символ в текущей кодовой странице для имени, но не использовать разделитель ПАОГО символ в диапазоне от 0 до 31 или любой символ, явно запрещенный файловой системой. Имя может содержать символы в расширенном наборе символов (128-255).

Используйте обратную косую черту (\), косую черту (/) или и то и другое, чтобы разделить компоненты на пути. Никакой другой символ не является допустимым в качестве разделителя путей. Обратите внимание, что имена UNC должны придерживаться следующего формата: \\ server \ share. Используйте период (.) Как компонент каталога в пути для представления текущего каталога.

Используйте два последовательных периода (..) в качестве компонента каталога в пути для представления родительского элемента текущего каталога. Используйте период (.), Чтобы отделить имя базового файла от расширения в имени каталога или имени файла.

Не используйте следующие символы в именах каталогов или имена файлов, так как они защищены:

<>: "/ \ |

Не используйте имена устройств, таких как Окс, мошенника, lpt1 , и prn, как имена файлов или имена каталогов.

Обработать путь как строку с нулевым символом.Максимальная длина для пути, включая обратную косую черту, задается MAX_PATH. . Unicode-версии нескольких функций допускают пути, превышающие длину MAX_PATH, если путь имеет префикс «\\? \». «\\? \» Сообщает функции отключить разбор пар. Однако каждый компонент в пути не может содержать больше символов MAX_PATH. Используйте префикс «\\? \» С путями для локальных устройств хранения и префикс «\\? \ UNC \» с путями, имеющими формат Universal Naming Convention (UNC). «\\? \» Игнорируется как часть пути. Например, «\\? \ C: \ myworld \ private» рассматривается как «C: \ myworld \ private», а «\\? \ UNC \ bill_g_1 \ hotstuff \ coolapps» рассматривается как «\\ bill_g_1 \ hotstuff \ coolapps».

Не принимайте чувствительность к случаю. Рассмотрите такие имена, как OSCAR, Oscar и oscar, чтобы они были одинаковыми.

Следующие зарезервированные слова не могут использоваться как имя файла: CON, PRN, AUX, CLOCK $, NUL, COM1, COM2, COM3, COM4, ​​COM5, COM6, COM7, COM8, COM9, LPT1, LPT2 , LPT3, LPT4, LPT5, LPT6, LPT7, LPT8 и LPT9. Кроме того, зарезервированные слова, за которыми следует расширение, например NUL.tx7, являются недопустимыми именами файлов.

Следуя правилам, перечисленным в этом разделе, приложение может создавать допустимые имена для файлов и каталогов независимо от используемой файловой системы.

Обратные косые черты (\) используются как разделители элементов в путях (деление имени файла на путь к нему или каталоги друг от друга в пути). Вы не можете использовать их в именах файлов или каталогов. Они могут потребоваться как часть имен томов (например, «C: \»).

Platform SDK Release: август 2001

+0

, поэтому в этих правилах есть ли какие-либо другие вполне законные имена файлов, которые в значительной степени нарушат что-либо, выполняемое в командной строке, даже в цитируемом пути? –