Ответ 1
На компьютерах под управлением Microsoft Windows XP или более поздней версии максимальная длина строки, которую вы можете использовать в командной строке, составляет 8191 символ.
В Windows, какова максимальная длина строки в командной строке? Значение, если я укажу программу, которая принимает аргументы в командной строке, такие как abc.exe -name=abc
Простое консольное приложение, которое я написал, берет параметры через командную строку, и я хочу знать, что является максимально допустимой суммой.
На компьютерах под управлением Microsoft Windows XP или более поздней версии максимальная длина строки, которую вы можете использовать в командной строке, составляет 8191 символ.
Извините за выемку старого потока, но я думаю, что ответ sunetos неверен (или это не полный ответ). Я провел несколько экспериментов (используя ProcessStartInfo в С#), и кажется, что строка "arguments" для команды командной строки ограничена 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