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
内联汇编。但否则使用getcurdir
或getcwd
以上是关于DOSBox 中的当前目录 [可选:使用 TURBO C]的主要内容,如果未能解决你的问题,请参考以下文章