如何使用Windows批处理脚本在变量中存储NULL ASCII字符(nul)?

时间:2016-08-04 21:54:31

标签: windows batch-file null ascii

在帖子How can I write a null ASCII character (nul) to a file with a Windows batch script?之后,确实有一种方法可以使用批处理脚本将ASCII NULL字符(nul)写入文件。

但是,我找不到将NULL字符存储到变量的方法。

假设文件null.nil包含一个NULL字符,将其重定向到set /P似乎不起作用,该变量显示为空:

< "null.nil" set /P NULL=
set NULL

for /F似乎无法正常工作,因为它似乎会忽略它遇到的每个NULL字符。依赖于同一文件null.nil,以下结果为空变量:

for /F %%S in ('type "null.nil"') do set NULL=%%S
set NULL

set语法更改为set "NULL=%%S"set NULL=^%%S不会改变任何内容,尽管命令行type "null.nil"确实回显了NULL字符(在我的Windows 10 x64计算机上) ;将type输出重定向到文件并使用十六进制编辑器查看。

那么如何将变量设置为单个NULL字符? NULL字符既可以从文件中获取(如null.nil),也可以由某些智能黑客生成,但我不希望它直接嵌入批处理文件中。

1 个答案:

答案 0 :(得分:3)

根据Microsoft的MSDN Library的页面Environment Variables以及帖子Setting environment variables for a specific run of a specific process,环境块存储在以NULL结尾的以NULL结尾的字符串块中 - 这里用EBNF表示法快速说明:

environment-block = { variable-definition } , null-char ;
variable-definition = variable-name , '=' , variable-value , null-char ;

由于此存储格式,无法将NULL字符存储到环境变量中。即使有人设法将NULL写入环境块,也无法再次读取它。