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

时间:2010-04-28 15:12:53

标签: windows null batch-file ascii

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

echo <Alt+2+5+6>

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

More?

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

copy con tmp.txt >nul
<Alt+2+5+6><Ctrl+Z>

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

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

5 个答案:

答案 0 :(得分:4)

好的,这很棘手,解决方案很难看,但它确实有效。

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

此批处理文件名为null.bat

findstr /v /r \n null.bat >> myfile.txt
[NULL]

(最后一行包含只有空字符)将空字符附加到myfile.txt

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

我已经尝试过其他一些东西,但这是我唯一能找到的并没有删除空字符的东西。

注意: findstr最初是随Windows 2000一起提供的,因此可能无法在以前版本的Windows上使用

答案 1 :(得分:4)

Here's an article,描述了如何使用批处理文件写入任意字节(搜索h2b.com)。这有效地解决了使用批处理脚本(包括null)写入任何不可打印数据的问题。

答案 2 :(得分:4)

我不喜欢不能轻易复制/粘贴到文本文件的解决方案。更多方法:

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

mshta vbscript:execute("CreateObject(""Scripting.FileSystemObject"").GetStandardStream(1).Write( Chr(00) ):Close")>testfile

2) certutil (需要临时文件)

echo 00>null.hex
certutil -decodehex null.hex null.bin

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

答案 3 :(得分:3)

不接受将空字符放入批处理文件的已接受答案的替代方法如下:

@echo off

set NULL_FILE=null.txt
set DEBUG_COMMANDS=write-null.dbg

echo e 100 >%DEBUG_COMMANDS%
echo 0 >>%DEBUG_COMMANDS%
echo n %NULL_FILE% >>%DEBUG_COMMANDS%
echo rbx >>%DEBUG_COMMANDS%
echo 0 >>%DEBUG_COMMANDS%
echo rcx >>%DEBUG_COMMANDS%
echo 1 >>%DEBUG_COMMANDS%
echo w >>%DEBUG_COMMANDS%
echo q >>%DEBUG_COMMANDS%

debug < %DEBUG_COMMANDS% >nul

del %DEBUG_COMMANDS%

这显然更加冗长,并且还有一个缺点,即它不能在Win64机器上运行(由于debug在这些环境中不再可用。)

答案 4 :(得分:2)

创建大小为 <size> 的空文件:

fsutil file createnew <file> <size>