MSDOS 6.22如何获取批处理目录?

4

我有一台旧的386电脑(没有Windows),它运行着MSDOS 6.22。因此,我不能使用任何基于cmd.exe(Windows的一部分)构建的解决方案。

我想将当前的bat脚本路径和名称传递给另一个程序,在这个bat代码中实现。

我尝试使用%CD%,但似乎只能在cmd.exe中工作。 我尝试使用%0参数,但它仅保持bat名称而不是带有完整路径的名称。

@echo off
set myPath=%cd%
myprogram.exe %myPath%\%0

它不起作用。当我使用全名从它所在目录启动批处理程序时,传递的参数为\mybat.bat

变量解析后,我想做如下操作:

@echo off
myprogram C:\BATCH\MYBAT.BAT

蝙蝠放置在 c:\batch 目录下,它的名称是 mybat.bat

我该如何做?


1
你可能会发现这个链接很有帮助。 - Stephan
请注意,当前正在执行的批处理文件可能不在当前目录中。 - Ross Ridge
@RossRidge 你说得没错,但我的批处理文件不在路径中,而且我也没有从另一个目录调用它。 - sarkiroka
2个回答

6

该解决方案@Stephan提供,非常不错,但需要预定义的帮助文件。

但是,您也可以构建一个不需要任何预定义文件的解决方案。

@echo off

>temp1.bat echo @PROMPT SET _CD=$P
>temp2.bat command /c temp1.bat
call temp2.bat
del temp1.bat
del temp2.bat

echo currentDir=%_CD%

这可以用来获取当前目录$P、时间$T或日期$D,因为这些值受到PROMPT命令的支持。

请删除变量中存储的">"前面的空格... 我的编辑被拒绝了。 - sarkiroka

2
  • 将当前工作文件夹写入文件
  • 与另一个准备好的文件合并
  • 调用生成的批处理文件以获取变量
  • 像往常一样使用

诀窍是创建一个只有一个命令的辅助批处理文件:set VARIABLE=somestring。我们通过将一个准备好的文件与set VARIABLE=(重要: 没有换行符)和另一个带有所需值的文件连接起来来实现这一点。

@echo off
cd>temp.txt
copy init.txt+temp.txt setvar.bat
call setvar.bat
myprogram.exe "%VARIABLE%\mybat.bat"

创建init.txt(您只需要执行一次(可重复使用的文件)):
在命令提示符下键入COPY CON INIT.TXT
输入@SET VARIABLE=^Z(按Ctrl-Z生成^Z
(遗憾的是,我不知道如何在DOS中用代码创建没有换行符的行)

Jeb提供了一个有趣的解决方案来获取工作目录,但这个更通用;它适用于任何命令的输出(只要它只有一行)。
例如,只需将上面的代码中的cd>temp.txt替换为dir | find "bytes free" > temp.txt

(答案源自我以前的一个回答

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接