命令行字符串的最大长度

时间:2010-07-08 15:08:10

标签: windows command-line

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

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

4 个答案:

答案 0 :(得分:73)

  

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

- Microsoft support KB article 830473

答案 1 :(得分:67)

很抱歉挖出一个旧帖子,但我认为sunetos' answer不正确(或者不完整答案)。我做了一些实验(在c#中使用ProcessStartInfo),似乎命令行命令的'arguments'字符串在XP中限制为2048个字符,在Win7中限制为32768个字符。我不确定8191限制是指什么,但我还没有找到任何证据。

答案 2 :(得分:36)

作为@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])变量来存储长度。根据{{​​3}},length表示以字节为单位的大小,而不是字符。所以我们有:65535 / 2 = 32767(因为WCHAR长2个字节)。

有几个步骤可以深入研究这个数字,但我希望很清楚。


另外,支持@sunetos回答接受的内容。 8191是允许输入cmd.exe的最大数量,如果超出此限制,则会生成The input line is too long.错误。所以,尽管cmd.exe不是传递新进程参数的唯一方法,但答案是正确的。

答案 3 :(得分:0)

在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