DOSBox 中的当前目录 [可选:使用 TURBO C]

Posted

技术标签:

【中文标题】DOSBox 中的当前目录 [可选:使用 TURBO C]【英文标题】:Current directory in DOSBox [Optional: Using TURBO C] 【发布时间】:2020-05-28 12:48:38 【问题描述】:

我想在特定目录中运行命令,然后返回。 (这是有原因的[参数有效性...])。

我尝试在 DOSBox 的批处理文件中执行此操作...

@echo off
cd>cd.cd
cd %mypath%
dosomething 1 2 3
::I am not sure....
cd (type cd.cd) 

%CD%, %dI, FOR 循环在 DOSBox 中没有任何作用...

我编写了一个 C 程序,但找不到返回 TURBO C 16 位当前目录的函数...

有人可以帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

%CD% is a variable in Windows cmd 所以你不能在 MS-DOS 中使用它。您可以通过将命令输出重定向到文件然后 read the file from disk 将不带任何参数的 cd 命令的当前目录输出存储到变量中来解决此问题。

准备一个仅包含@set cd= 且不包含任何换行符的文件。它可以在 DOS 中通过按 Ctrl+Z 然后在运行 COPY CON 时按 Enter 来创建。我们将其命名为 init.txt

然后每次你想获取当前目录运行

cd >cd.txt
copy init.txt+cd.txt setcd.bat
setcd
最后一条命令会将当前目录保存到%CD%变量中

【讨论】:

有没有办法在DOS的同一行追加一个字符串? 实际上我的 DOSBox 因某种原因挂在 copy con <file-name> 上。 @Nephewof*** 它没有挂起。因为CON is the keyboard,所以等你输入内容。见copy con。这就是为什么你不能create a folder named “CON” in Windows (easily) 哦..真是出乎意料?。有什么方法可以让我们用两个不同的命令写在同一行上? 类似@echo set cd=(somespecialcharacter)>mp 然后@cd>>mp【参考方案2】:

要以编程方式从 Turbo C 获取当前目录,您需要阅读 current directory structure (CDS)。当前目录是第一个 67 字节的字段,包含一个以 null 结尾的字符串

要获取第一个 CDS 的地址,请使用 DOS int 21h 的 52h 函数(设置 AH=52h)。后面的 CDS 可以通过将偏移量添加到第一个地址来获得。欲了解更多信息,请阅读

Format of current directory structure (CDS) (array, LASTDRIVE entries) PC Mag Aug 1991 PC Mag 9 Nov 1993 PC Mag 25 Jun 1991

【讨论】:

【参考方案3】:

    命令方法(@phuclv 的第一个答案)(缺点:需要维护一个永久文件)

    汇编方法(@phuclv 的第一个答案)(缺点:我真的找不到在汇编中执行系统调用的任何方法,如果有人能提供一个示例并询问一些问题,那就太好了特权用户编辑此答案以删除此信息)

    TURBOC 方法(反正我一直在写 C90 代码,所以我就按照我本来打算的方式使用。)

这是可用于在 TURBOC3 中获取和执行某些操作的示例 C90 代码:

#include<stdio.h>
//#include<string.h>

void main()


  char path[128];
  system("cd>__p_");
  fscanf(fopen("__p_","r"),"%[^\n]",path);
  remove("__p_");

  //path variable/array/pointer contains your current path.

  //printf(path);

  //strcat(command,path); //char command[128]="cd ";
  //system(command); 


【讨论】:

不能用Turbo-C的getcwd函数获取当前工作目录吗? x-hacker.org/ng/borcpp/ng2e153.html 你可以使用intdos()来运行中断,不需要使用内联汇编。但是,即使您想在保存必要的寄存器后使用 mov ah, 52h; int 21h 内联汇编。但否则使用getcurdirgetcwd

以上是关于DOSBox 中的当前目录 [可选:使用 TURBO C]的主要内容,如果未能解决你的问题,请参考以下文章

Mac OX环境下DOSBox汇编环境的搭建

关于DOSBOX启动时自动挂载到指定盘及目录问题

关于DOSBOX启动时自动挂载到指定盘及目录问题

dosbox,masm的挂载

在 macOS 上使用 dosbox 的 MASM 中的 ExitProcess 错误

在 Dosbox 中安装鼠标导致段错误