2017-01-21 49 views
2

我已經寫了一個程序,返回鍵盤爲整數爲DOS 但我不知道如何得到它的輸出作爲變量。MS-DOS如何獲得作爲變量的命令輸出

注:我使用的是MS-DOS 7/Windows 98中,所以我不能使用FOR /FSET /P

有誰知道我能做到這一點?

回答

2

一些解決方案由Eric Pement here描述。但是,對於舊版本的cmd,作者被迫使用外部工具。

例如,程序之類的工具STRINGS由Douglas博陵,允許以下代碼:

echo Greetings! | STRINGS hi=ASK # puts "Greetings!" into %hi%

同由Richard布魯爾無二ASET

echo Greetings! | ASET hi=line # puts "Greetings!" into %hi%

一個替代純DOS解決方案需要將程序輸出重定向到該文件(在下面的示例中命名爲ANSWER.DAT),然後使用sp特別準備的批處理文件。舉上述頁面:

[I] n的,我們需要能夠發出命令 set MYVAR={the contents of ANSWER.DAT go here}批處理文件。這是一項艱鉅的任務,因爲MS-DOS不提供簡單的方法將"set MYVAR="加入文件

正常的DOS文本文件和批處理文件以兩個連續字節結束所有行:回車(Ctrl-M,十六進制0D或ASCII 13)和一個換行符(Ctrl-J,十六進制0A或ASCII 10)。在批處理文件中,您必須能夠在行的中間嵌入一個Ctrl-J

許多文本編輯器有一種方法來做到這一點:通過Ctrl-P鍵隨後Ctrl鍵-J(DOS EDIT與Win95/98上,VDE),經由CTRL-Q前綴(EMACS, PFE),通過直接輸入ALT和數字鍵盤(QEdit,Multi-Edit)或通過指定的功能鍵(Boxer)。其他編輯器絕對不會支持此操作(記事本,Editpad,從MS-DOS 6.22或更早版本開始編輯; VIM只能在二進制模式下插入換行符,但不能在正常文本模式下插入)。

如果你能做到這一點,您的批處理文件可能是這樣的:

@echo off 
:: assume that the datafile exists already in ANSWER.DAT 
echo set myvar=^J | find "set" >PREFIX.DAT 
copy PREFIX.DAT+ANSWER.DAT VARIAB.BAT 
call VARIAB.BAT 
echo Success! The value of myvar is: [%myvar%]. 
:: erase temp files ... 
for %%f in (PREFIX.DAT ANSWER.DAT VARIAB.BAT) do del %%f >NUL 

如果你看到^ J於上述3行,換行應該被嵌入在這一點上。您的編輯器可能會將其顯示爲帶有嵌入式圓圈的方框。