我正在尝试从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>
,但即使这样,输出文件也会被创建但仍然是空的。
我真的希望批处理文件能够独立存在,而不需要(例如)包含空字符的单独文件,可以在需要时复制它。
答案 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>