100 windows command-line
在Windows中,命令行字符串的最大长度是多少?这意味着如果我指定一个在命令行上接受参数的程序,例如abc.exe -name=abc
我编写的一个简单的控制台应用程序通过命令行获取参数,我想知道最大允许量是多少.
sun*_*tos 79
在运行Microsoft Windows XP或更高版本的计算机上,您可以在命令提示符处使用的字符串的最大长度为8191个字符.
Sug*_*rue 70
很抱歉挖掘旧线程,但我认为sunetos的答案不正确(或者不是完整答案).我做了一些实验(在c#中使用ProcessStartInfo),似乎命令行命令的'arguments'字符串在XP中限制为2048个字符,在Win7中限制为32768个字符.我不确定8191限制是指什么,但我还没有找到任何证据.
ST3*_*ST3 37
作为@Sugrue,我也在挖掘一个旧线程.
为了解释为什么有32768(我认为应该是32767,但让我们相信实验测试结果)字符限制我们需要深入研究Windows API.
无论您如何使用命令行参数启动程序,它都会转到ShellExecute,CreateProcess或任何扩展版本.这些API基本上包装了未正式记录的其他NT级API.据我所知,这些调用包含NtCreateProcess,它需要OBJECT_ATTRIBUTES结构作为参数,以创建该结构使用InitializeObjectAttributes.我们在这个地方看到了UNICODE_STRING.所以现在让我们来看看这个结构:
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
Run Code Online (Sandbox Code Playgroud)
它使用USHORT(16位长度[0; 65535])变量来存储长度.根据这个,length表示以字节为单位的大小,而不是字符.所以我们有:( 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
90764 次 |
| 最近记录: |