[英]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.