MS-DOS如何将命令输出作为变量

时间:2017-01-21 17:13:24

标签: dos

我编写了一个程序,它将键码作为整数返回给DOS 但我不知道如何将它作为变量输出。

注意:我使用的是MS-DOS 7 / Windows 98,因此我无法使用FOR /FSET /P

有谁知道我该怎么做?

1 个答案:

答案 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,则应在该点嵌入换行符。您的编辑器可能会将其显示为带有嵌入式圆圈的方框。