windows命令行太长 - windows命令行长度限制




命令行字符串的最大长度 (2)

在运行Microsoft Windows XP或更高版本的计算机上,可以在命令提示符下使用的字符串的最大长度为8191个字符。

- Microsoft支持知识库文章830473

在Windows中,命令行字符串的最大长度是多少? 意思是如果我指定一个程序在命令行上使用参数,例如abc.exe -name=abc

我编写的一个简单的控制台应用程序通过命令行获取参数,我想知道什么是最大允许量。


作为@Sugrue我也在挖掘一个旧线程。

为了解释为什么有32768(我认为应该是32767,但让我们相信实验测试结果)字符限制,我们需要深入研究Windows API。

不管你如何用命令行参数启动程序,它都会去ShellExecuteCreateProcess或者任何扩展它们的版本。 这些API基本上包装了其他未正式记录的NT级API。 据我所知,这些调用包装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并不是传递新进程参数的唯一方法,但答案仍然正确。





command-line