Максимальная длина строки командной строки

Какова максимальная длина строки командной строки в Windows? Смысл, если я укажу программу, которая принимает аргументы в командной строке, такие как abc.exe -name=abc

Простое консольное приложение, которое я написал, принимает параметры через командную строку, и я хочу знать, каково максимально допустимое количество.

3 ответа

Решение

На компьютерах под управлением Microsoft Windows XP или более поздней версии максимальная длина строки, которую можно использовать в командной строке, составляет 8191 символ.

- Поддержка Microsoft, статья базы знаний 830473

Извините за то, что выкопал старую ветку, но я думаю, что ответ Сунетоса неправильный (или не полный ответ). Я провел несколько экспериментов (используя ProcessStartInfo в C#), и кажется, что строка аргументов для команды командной строки ограничена 2048 символами в XP и 32768 символами в Win7. Я не уверен, к чему относится предел 8191, но я пока не нашел никаких доказательств этого.

Как @Sugrue я также копаю старую ветку.

Чтобы объяснить, почему существует ограничение в 32768 (я думаю, это должно быть 32767, но давайте поверим в результат экспериментального тестирования) ограничение, которое нам нужно найти в Windows API.

Независимо от того, как вы запускаете программу с аргументами командной строки, она переходит к ShellExecute, CreateProcess или любой расширенной версии. Эти API-интерфейсы в основном обертывают другие API уровня NT, которые официально не документированы. Насколько мне известно, эти вызовы обертывают NtCreateProcess, которому в качестве параметра требуется структура OBJECT_ATTRIBUTES, для создания этой структуры используется InitializeObjectAttributes. В этом месте мы видим UNICODE_STRING, Итак, теперь давайте посмотрим на эту структуру:

typedef struct _UNICODE_STRING {
    USHORT Length;
    USHORT MaximumLength;
    PWSTR  Buffer;
} UNICODE_STRING;

Оно использует USHORT (16-битная длина [0; 65535]) переменная для хранения длины. И в соответствии с этим длина указывает размер в байтах, а не в символах. Итак, мы имеем: 65535 / 2 = 32767 (так как WCHAR длиной 2 байта).

Есть несколько шагов, чтобы покопаться в этом числе, но я надеюсь, что это понятно.


Также для поддержки @sunetos ответьте, что принято. 8191 - максимально допустимое количество cmd.exeЕсли вы превысите этот предел, The input line is too long. ошибка генерируется. Итак, ответ правильный, несмотря на то, что cmd.exe не единственный способ передать аргументы для нового процесса.

В Windows 10 это все еще 8191 символов... по крайней мере, на моей машине.

Он просто обрезает любой текст после 8191 символа. Ну, на самом деле, у меня 8196 символов, а после 8196, это просто не позволит мне больше печатать.

Вот скрипт, который проверит, как долго вы можете использовать оператор. Хорошо, если у вас установлен gawk/awk.

echo rem this is a test of how long of a line that a .cmd script can generate >testbat.bat
gawk 'BEGIN {printf "echo -----";for (i=10;i^<=100000;i +=10) printf "%%06d----",i;print;print "pause";}' >>testbat.bat
testbat.bat
Другие вопросы по тегам