在帖子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
),也可以由某些智能黑客生成,但我不希望它直接嵌入批处理文件中。
答案 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写入环境块,也无法再次读取它。