[英]How can I store a NULL ASCII character (nul) in a variable with a Windows batch script?
[英]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 版本上可能不可用
不涉及必须将空字符放入批处理文件的已接受答案的替代方法如下:
@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.