¿Cómo puedo almacenar un carácter NULL ASCII(nul) en una variable con un script por lotes de Windows?
batch-file (1)
Siguiente publicación ¿Cómo puedo escribir un carácter ASCII nulo (nul) en un archivo con un script por lotes de Windows? de hecho, hay métodos para escribir un carácter ASCII NULL (nul) en un archivo con un script por lotes.
Sin embargo, no puedo encontrar una manera de almacenar un carácter NULL en una variable.
Suponiendo que el archivo null.nil
contiene un único carácter NULL, redirigirlo a set /P
no parece funcionar, la variable aparece vacía:
< "null.nil" set /P NULL=
set NULL
for /F
no parece funcionar tampoco, ya que parece descartar cada carácter NULL que encuentra. Dependiendo del mismo archivo null.nil
, los siguientes resultados en una variable vacía:
for /F %%S in (''type "null.nil"'') do set NULL=%%S
set NULL
Cambiar la sintaxis set
para set "NULL=%%S"
o para set NULL=^%%S
no cambia nada, aunque la línea de comando type "null.nil"
hace eco del carácter NULL (en mi máquina con Windows 10 x64; redirigir el type
salida a un archivo y verlo con un editor hexadecimal).
Entonces, ¿cómo puedo establecer una variable para un solo carácter NULL? El carácter NULL puede tomarse de un archivo (como null.nil
) o ser generado por algún hack inteligente, pero no quiero que se null.nil
directamente en el archivo por lotes.
De acuerdo con la página Variables de entorno de MSDN Library de Microsoft y también a la publicación Configuración de variables de entorno para una ejecución específica de un proceso específico , el bloque de entorno se almacena en un bloque terminado en NULL de cadenas con terminación NULL, que se ilustra rápidamente en EBNF notación:
environment-block = { variable-definition } , null-char ; variable-definition = variable-name , ''='' , variable-value , null-char ;
Debido a este formato de almacenamiento, no es posible almacenar un carácter NULL en una variable de entorno. Incluso si uno lograra escribir un NULL en el bloque de entorno, nunca podría volver a leerse.