una tener metadescription maximos longitud etiqueta description debe cuantos contador caracteres windows command-line

windows - tener - Longitud máxima de la cadena de línea de comando



etiqueta title (3)

En equipos con Microsoft Windows XP o posterior, la longitud máxima de la cadena que puede usar en el símbolo del sistema es 8191 caracteres.

- Soporte de Microsoft KB artículo 830473

En Windows, ¿cuál es la longitud máxima de una cadena de línea de comando? Significado si especifico un programa que toma argumentos en la línea de comando como abc.exe -name=abc

Una aplicación de consola simple que escribí toma parámetros a través de la línea de comandos y quiero saber cuál es la cantidad máxima permitida.


Como @Sugrue, también estoy desenterrando un hilo viejo.

Para explicar por qué hay 32768 (creo que debería ser 32767, pero dejemos creer el resultado de las pruebas experimentales) la limitación de caracteres que necesitamos para profundizar en la API de Windows.

No importa cómo inicie el programa con los argumentos de la línea de comandos, va a ShellExecute , CreateProcess o cualquier versión extendida. Estas API básicamente envuelven otras API de nivel NT que no están oficialmente documentadas. Hasta donde sé, estas llamadas NtCreateProcess , que requiere la estructura OBJECT_ATTRIBUTES como parámetro, para crear esa estructura InitializeObjectAttributes . En este lugar, vemos UNICODE_STRING . Entonces, echemos un vistazo a esta estructura:

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

Usa la USHORT (16-bit length [0; 65535]) para almacenar la longitud. Y de acuerdo con this , la longitud indica el tamaño en bytes, no en caracteres. Entonces tenemos: 65535 / 2 = 32767 (porque WCHAR tiene 2 bytes de longitud).

Hay algunos pasos para profundizar en este número, pero espero que esté claro.

Además, para apoyar a @sunetos, responda lo que se acepta. 8191 es un número máximo que se puede ingresar en cmd.exe ; si supera este límite, The input line is too long. error es generado Entonces, la respuesta es correcta a pesar de que cmd.exe no es la única forma de pasar argumentos para un nuevo proceso.


Perdón por buscar un hilo viejo, pero creo que la respuesta de Sunetos no es correcta (o no es la respuesta completa). He hecho algunos experimentos (usando ProcessStartInfo en c #) y parece que la cadena ''arguments'' para un comando de línea de comando está limitada a 2048 caracteres en XP y 32768 caracteres en Win7. No estoy seguro de a qué se refiere el límite 8191, pero aún no he encontrado evidencia de ello.