如何运行包含 CD 的 MS-DOS/Win9x 批处理文件,同时保留原始工作目录?

Zhr*_*hro 5 command-line windows-95 ms-dos windows-98 batch-file

考虑以下批处理文件test.bat

CD C:\SOFTWARE
program.exe
Run Code Online (Sandbox Code Playgroud)

该脚本运行自C:\ELSWHERE

C:\ELSWHERE> C:\test.bat
Run Code Online (Sandbox Code Playgroud)

脚本退出后,当前工作目录是 nowC:\SOFTWARE而不是以前的工作目录C:\ELSWHERE

该脚本将工作目录更改为,C:\SOFTWARE因为program.exe需要config.ini位于当前C:\SOFTWARE工作目录并使用当前工作目录来定位它。如果软件program.exe直接运行,C:\或者C:\ELSWHERE使用其绝对路径名,程序将无法读取其配置并抛出错误。解决方案是首先CD进入该C:\SOFTWARE文件夹并从那里运行程序。

在批处理文件中执行此操作的问题是,这也会更改先前环境的工作目录,无论是主机 COMMAND.COM 工作目录还是另一个批处理文件。

对于基于 NT 的命令提示符来说,这不是问题,它可以访问pushdpopd以及其他有用的环境变量来保留旧的工作目录。但在旧的 MS-DOS\Win9x command.com 的限制下是否可以做到这一点?

jeb*_*jeb 2

这甚至适用于 MSDOS6.22

密码蝙蝠

@echo off

@echo @prompt @set drive=$N:$_ @set pwd=$P> temp.bat
%comspec% /c temp.bat > temp2.bat
call temp2.bat
del temp.bat
del temp2.bat
echo %PWD%
Run Code Online (Sandbox Code Playgroud)

它将当前目录存储到pwd变量中,将当前驱动器存储到drive变量中。

这可用于恢复以前的目录。

在你的情况下

@echo off
call pwd.bat

CD C:\SOFTWARE
program.exe

%drive%
cd %pwd%
Run Code Online (Sandbox Code Playgroud)