【问题标题】:How can I store a NULL ASCII character (nul) in a variable with a Windows batch script?如何使用 Windows 批处理脚本将 NULL ASCII 字符 (nul) 存储在变量中?
【发布时间】: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


【解决方案1】:

根据 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 写入环境块,也无法再次读取它。

【讨论】:

    猜你喜欢
    • 2011-02-13
    • 2022-06-15
    • 2011-04-20
    • 2022-01-21
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 2018-11-03
    相关资源
    最近更新 更多