繁体   English   中英

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

[英]How can I write a null ASCII character (nul) to a file with a Windows batch script?

我试图从 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>但即使如此,输出文件已创建但仍为空。

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

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

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

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

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

这个批处理文件,名为null.bat

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

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

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

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

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

这是一篇介绍如何使用批处理文件写入任意字节的文章(搜索h2b.com )。 这有效地解决了使用批处理脚本(包括空值)写入任何不可打印数据的问题。

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

@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在这些环境中不再可用)。

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

fsutil file createnew <file> <size>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM