簡體   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