我编写了一个程序,它将键码作为整数返回给DOS 但我不知道如何将它作为变量输出。
注意:我使用的是MS-DOS 7 / Windows 98,因此我无法使用FOR /F
或SET /P
有谁知道我该怎么做?
答案 0 :(得分:2)
Eric Pement here描述了一些解决方案。但是,对于旧版本的cmd
,作者被迫使用外部工具。
例如,Douglas Boling的STRINGS
等程序工具允许使用以下代码:
echo Greetings! | STRINGS hi=ASK # puts "Greetings!" into %hi%
Richard Breuer的ASET
同样如此:
echo Greetings! | ASET hi=line # puts "Greetings!" into %hi%
备用纯DOS解决方案之一需要将程序输出重定向到文件(在下面的示例中名为ANSWER.DAT
),然后使用专门准备的批处理文件。引用上述页面:
[我]我们需要能够发出命令的批处理文件
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编辑与Win95 / 98,VDE),通过 Ctrl-Q 前缀(Emacs,PFE),通过直接输入 ALT 和数字键盘(QEdit,Multi-Edit),或通过指定的功能键(Boxer) 。其他编辑绝对不支持这个(记事本,编辑板,来自MS-DOS 6.22或更早版本的EDIT; 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
如果您在上面第3行看到^ J,则应在该点嵌入换行符。您的编辑器可能会将其显示为带有嵌入式圆圈的方框。