将命令的输出保存在文件MS-DOS 1.x中


27

似乎[COMMAND]>[FILE]在MS-DOS的早期版本中不起作用。我正在使用MS-DOS 1.25,以上表达式给出了该语句invalid argument

更新:由于确实在DOS 1.x中不起作用,因此可以使用virtual box的某些功能来获取输出,或者说可以从某些日志文件中获取输出。


18
为什么要使用DOS 1.25?
Keltari '16

41
@Keltari:没有烦人的Windows 10更新通知
Mark K Cowan,

6
如果您对安装没有任何其他疑问,请尝试Retrocomputing,这是另一家专门针对此类问题的SE网站。(全部披露:我可能与该网站有些隶属。)
wizzwizz4

4
这个问题使我再次感到年轻!
德米特里·格里戈里耶夫

9
MS-DOS 1.x本质上是一个CP / M克隆,其中Ctrl-P触发了将控制台输出复制到打印机的操作。因此,在MS-DOS中也可能使用类似的方法。
托尔比约恩Ravn的安德森

Answers:


5

您可以使用虚拟机调试工具(或gdb /其他工具)直接读取内存。ms-dos没有内存保护,也不是一个多任务系统,因此您可以读取虚拟机内存,可以读取虚拟机vga作为输入。

文档说存在命令

info vgatext -- print the contents of the VGA framebuffer formatted as standard text mode

获取输出的正确语法是:run VirtualBox --debug --startvm msdos1.25,然后在调试器控制台中: info vgatext

复制粘贴的输出:

The COMPAQ Personal Computer DOS                                                
Version 1.11                                                                    


(C) Copyright COMPAQ Computer Corp. 1982                                        
(C) Copyright Microsoft 1981, 82                                                


A>                                                                              











--------------------------------------------------------------------------------
VBoxDbg> 

因此,您可以编写一个调试程序脚本,该脚本将钩住程序内存中的内存值,并在程序执行输出时转储vga屏幕,或者您可以编写脚本来暂停cpu,一致地保存内容,如果输出发生更改,保存更新的内容并继续cpu运行

要调查的一些选项是:

  • 查找如何编写调试脚本以转储应用程序的内存内容

  • 为quemu / dosbox / virtualbox找到一些调试vga驱动程序/串行端口/内存转储解决方案

  • 从80年代找到一些旧的实用程序,也许有人为此写了回去

  • 在此处添加freedos标记(甚至在大型stackoverflow上移动/重复您的问题,我想有些专家应该了解类似这样的问题

如果发现有趣的内容,我将在稍后进行更新,但是您能否透露一些有关为什么使用1.25的详细信息,该程序是否可以在更新版本的msdos上运行?我敢打赌,您可以找到一些年轻的汇编黑客,他们急切地希望将该程序修补到较新的版本(或使用asm添加文件输出),但需要支付少量费用


您能否提供有关该过程的其他信息?
布莱克

@Blake已更新,似乎info vgatext所有您需要做的工作就是为调试器编写正确的脚本,这似乎很
奇怪

您提供的信息非常有趣。实际上,这对于我的情况可能绝对有用。我将它用于旧应用程序,我想通过给它输入并自动获取输出来了解它的工作方式。这可能不是最好的方法,但我想这样做。谢谢您的回答,请给我一两天的时间来阅读本手册并编写某种脚本(希望有可能),并将为您提供有关其是否有效的信息。非常感谢。
布莱克

1
如果我还没有标记答案,那我肯定会标记它。谢谢您的帮助。
布莱克

1
我需要将应用程序的输出作为文本输出。在文档中提到了如何在终端中使用调试控制台。使用VBoxManaged debugvms <已在调试模式下启动的VM的名称> info vgatext,它将在终端模式下显示屏幕,并使用重定向和某种简单的解析方法设法获得所需的信息。谢谢。
布莱克

40

似乎[COMMAND]> [FILE]在早期版本的MS-DOS中不起作用。

我正在使用MS-DOS 1.25,上面的表达式给出了该语句无效的参数

那是正确的。v1.25中没有您想做的事情。

v2.0中添加了命令重定向(以及许多其他改进)。

MS-DOS 2.0版(等效于PC-DOS 2.0)于1983年3月首次发布。回想起来,它是一个新的操作系统(尽管非常注意保持与MS-DOS版本1的兼容性)。它包含许多重要的创新和增强的功能,包括下一页列出的功能。

  • 同时支持大容量软盘和硬盘
  • 许多类似UNIX / XENIX的功能,包括分层文件结构,文件句柄,I / O重定向,管道和过滤器
  • 后台打印(后台打印)
  • 卷标签,以及其他文件属性
  • 可安装的设备驱动程序
  • 用户可自定义的系统配置文件,用于控制其他设备驱动程序的加载,系统磁盘缓冲区的数量等
  • 维护可用于在程序之间传递信息的环境块
  • 可选的ANSI显示驱动程序,该程序允许程序以独立于硬件的方式定位光标并控制显示特征
  • 支持应用程序动态分配,修改和释放内存
  • 支持定制的用户命令解释器(shell)
  • 系统表可协助应用软件修改其货币,时间和日期格式(称为国际支持)

高级MS-DOS编程,由Ray Duncan


我该怎么办?

可能的解决方法是捕获屏幕(作为文本)并解析输出。

该问题的答案DOS中的屏幕截图列出了一些TSR(终止但常驻)程序,这些程序是您进行研究的起点。


13
好答案。只有最真实的超级用户才会关心MS-DOS 1.0。
我说恢复莫妮卡

谢谢您的回答,我很感激,但是我想找到一种方法(例如,使用虚拟盒子功能),这就是为什么我暂时不将其标记为答案的原因。
布莱克

@Blake可能的解决方法是捕获屏幕(作为文本)并解析输出。我已经更新了答案。
DavidPostill

抱歉,尝试使用此tsr程序时,结果延迟。一旦我可以访问我的机器,我会通知您。这是一个很好的选择,我希望能正常工作。是否有必要安装其他程序(例如创建此tsr环境的程序)?
布莱克

1
@Blake我不记得了,但是使用DOS 已经有很多年了。不必担心测试的延迟;)
DavidPostill

-3

您可以安装C并编写一个程序来接受dos命令,然后在shell中运行它们并记录结果。我建议您使用Borland Turbo C 2.01。如果您想编写代码,也可以用Quickbasic编写代码。

https://archive.org/details/msdos_borland_turbo_c_2.01

就个人而言,我将使用DOS 5.5或6,因为还会得到一些其他东西。


1
在v1.25中可以使用吗?
布莱克

如果是这样,您能在安装C以及如何记录结果方面给我一些其他帮助,非常感谢。
布莱克

1
@Blake它在v1中不起作用
edc65 '16

如果C提到您在编写此类程序时将使用的API,则使用C编写程序将是一个有用的答案。(并且,当然,在代码与DOS 1.x兼容的问题中考虑了明确的要求。)此答案均无效。它只是向流行的编译器/ IDE包提供垃圾邮件,而没有有关此类工具集相关性的指导。
科迪·格雷

C编译器具有用于stdin和stdout的功能,并且可以运行shell命令。我不知道哪个编译器可以在DOS 1中工作。如果您非常关心维护主板,则更好的问题是,为什么有人会为MS DOS 1编写代码……
Gandolf989,2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.