2010-04-28 162 views
10

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

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>,但即使这样输出文件也会被创建,但仍保持为空。

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

回答

4

好吧,这很棘手,解决方案很丑,但它的工作原理。

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

此批处理文件,名为null.bat

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

(其中最后一行包含只有空字符)追加空字符到myfile.txt

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

我已经尝试了其他几件事,但是这是我能找到的唯一一个没有去掉空字符的东西。

注:findstr首先用Windows 2000的出货,可能会无法使用在Windows

+0

这正是我需要的,谢谢! – 2010-04-28 17:00:15

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

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

+3

64位Windows有没有解决方案? – Mehrdad 2011-08-25 08:48:33

4

我不喜欢这个解决方案不能很容易复制/粘贴到文本文件。这么几个更多的方式:

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 

1)MSHTA(可在批处理文件或从命令行)可直接使用

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

相关问题