2016-08-04 65 views
8

繼後How can I write a null ASCII character (nul) to a file with a Windows batch script?確實有方法用批處理腳本將ASCII NULL字符(nul)寫入文件。如何使用Windows批處理腳本在變量中存儲空ASCII字符(nul)?

但是,我找不到將NULL字符存儲到變量的方法。

假設該文件null.nil包含了一個NULL字符,它重定向到set /P似乎不工作時,變量顯示爲空:

< "null.nil" set /P NULL= 
set NULL 

for /F似乎並沒有工作,要麼因爲它似乎駁回每NULL字符它遇到。依託同一個文件null.nil,在一個空變量的結果如下:

for /F %%S in ('type "null.nil"') do set NULL=%%S 
set NULL 

改變set語法set "NULL=%%S"set NULL=^%%S並不能改變什麼,但在命令行type "null.nil"也呼應NULL字符(在我的Windows 10 x64機器;將type輸出重定向到一個文件並使用十六進制編輯器查看它)。

那麼如何設置一個變量爲單個NULL字符呢? NULL字符可以從文件中獲取(如null.nil),也可以由某些智能黑客生成,但我不希望它直接嵌入到批處理文件中。

+4

只是一個猜測...我會懷疑內部env。變量被處理爲以空字符結尾的字符串,並且由於只包含空字符的字符串是空的(沒有任何內容),並設置env。 var to nothing清除它,你會在這裏遇到問題。 :-) –

+0

不幸的是,你是對的,@KenWhite;我剛剛在這裏找到一個帖子,證實您的合理懷疑:[爲特定進程的特定運行設置環境變量](http://stackoverflow.com/a/13092538) – aschipfl

+0

如果您以某種方式設法將變量設置爲單個NULL字符'你如何預測你可以使用*這個變量? – dxiv

回答

2

根據微軟的MSDN庫的Environment Variables頁,並且還到後Setting environment variables for a specific run of a specific process,環境塊存儲在空終止字符串的NULL結束的塊 - 在這裏EBNF符號快速所示:

environment-block = { variable-definition } , null-char ; 
variable-definition = variable-name , '=' , variable-value , null-char ; 

由於這種存儲格式,不可能將NULL字符存儲到環境變量中。即使有人設法將NULL寫入環境塊,也不能再次讀取它。