如何使用Windows批处理脚本将空ASCII字符(nul)写入文件?

Mat*_*och 10 windows null ascii batch-file

我试图从Windows批处理脚本中将ASCII空字符(nul)写入文件但没有成功.我最初尝试使用echo这样的:

echo <Alt+2+5+6>
Run Code Online (Sandbox Code Playgroud)

看起来它应该工作(<Alt+2+5+6>在命令窗口中键入会写一个空字符 - 或者^@它出现),但echo然后输出:

More?
Run Code Online (Sandbox Code Playgroud)

并挂起,直到我按下<Return>.作为替代方案,我尝试使用:

copy con tmp.txt >nul
<Alt+2+5+6><Ctrl+Z>
Run Code Online (Sandbox Code Playgroud)

这正是我需要的,但只有在命令窗口中手动输入它.如果我从批处理文件中运行它,它会挂起,直到我按下,<Ctrl+Z>但即使这样,输出文件也会被创建但仍然是空的.

我真的希望批处理文件独立,而不需要(例如)包含空字符的单独文件,可以在需要时复制.

bal*_*pha 5

好吧,这很棘手,而且解决方案很丑陋,但它有效。

您可以使用批处理文件本身作为包含要复制的空字符的文件。

该批处理文件名为null.bat

findstr /v /r \n null.bat >> myfile.txt
[NULL]
Run Code Online (Sandbox Code Playgroud)

(其中最后一行仅包含空字符)将空字符附加到myfile.txt

findstr /v /r显示与正则表达式不匹配的所有行,即仅显示最后一行,因为没有换行符。

我尝试了其他几种方法,但这是我能找到的唯一一种没有删除空字符的方法。

注意: findstr最初随 Windows 2000 一起提供,因此可能不适用于早期版本的 Windows


npo*_*aka 5

我不喜欢无法轻松复制/粘贴到文本文件的解决方案。所以还有一些方法:

1)mshta(可以直接在批处理文件中或从命令行使用):

mshta vbscript:execute("CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1).Write( Chr(00) ):Close")>testfile
Run Code Online (Sandbox Code Playgroud)

2)certutil(需要一个临时文件)

echo 00>null.hex
certutil -decodehex null.hex null.bin
Run Code Online (Sandbox Code Playgroud)

3) makecab 只是在这里检查子程序 - http://ss64.com/nt/syntax-genchr.html