【发布时间】:2016-08-04 21:54:30
【问题描述】:
在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),也可以通过一些聪明的黑客生成,但我不希望它直接嵌入到批处理文件中。
【问题讨论】:
-
只是一个猜测......我怀疑内部环境。变量被处理为以空字符结尾的字符串,并且由于一个只包含空字符的字符串是空的(就内容而言什么都没有),并且设置了一个 env。 var to nothing 可以清除它,您将在这里遇到问题。 :-)
-
不幸的是,你是对的,@KenWhite;我刚刚在这里发现了一个帖子,证实了你的合理怀疑:Setting environment variables for a specific run of a specific process
-
如果您以某种方式设法
set a variable to a single NULL character,您如何预见您可以使用该变量? -
我什至尝试创建一个 python 3 脚本并将一个 NULL 字符放入一个环境中。 var,但子 cmd 不会接受它:未定义。所以肯怀特可能是对的。这就像试图在 C 字符串中放置一个空字符。
-
@dxiv,由于环境变量被证明是以空终止的形式存储的,当然不可能读取它们;问问题的时候不知道存储格式...
标签: windows batch-file null ascii