在批处理文件中更改当前工作目录是最佳做法吗?

Is it a best practice to change the current work directory in the batch file?

我有一个批处理文件,我通过传递某些参数来调用一个应用程序。

这是我的 sample.batch 文件的内容

cd C:\Program Files\MyApplication
"C:\Program Files\MyApplication\Application.exe" -e -p "Application Projects/Testing/General/Notepad" -rm "Close Notepad"

在这里,我需要将我当前的工作目录更改为 Application.exe 所在的文件夹,以便它找到位于该 folder.Is 中的某些必需的 JAR,这是最佳做法吗?更改执行批处理文件之前的当前工作目录。

尝试

pushd C:\Program Files\MyApplication
...
popd

作为另一种选择。

最佳做法取决于意见和情况

一种方法是 Magoo and Stephan 已经建议的方法:

pushd "%ProgramFiles%\MyApplication"

rem Other commands.

popd

此解决方案甚至适用于默认情况下启用命令扩展的 UNC 路径,因为 PUSHD 临时将网络共享映射到驱动器号,并使该网络驱动器成为当前目录。

另一种解决方案是使用 SETLOCALCDENDLOCAL,它具有所有优点setlocalendlocal 之间的命令对环境变量、命令扩展和延迟扩展的修改对于 endlocal 命令行之后的命令无关紧要。

setlocal EnableExtensions DisableDelayedExpansion
cd /D "%ProgramFiles%\MyApplication"

rem Other commands running in their own environment, here running with command
rem extensions explicitly enabled and delayed expansion explicitly disabled.

endlocal

命令 ENDLOCAL 也将当前目录恢复为执行 SETLOCAL.

时设置的目录

请参阅 上的答案,其中包含有关 PUSHD(推送目录)、POPD(弹出目录)的更多详细信息, SETLOCAL(设置本地环境),CD(改变目录)和ENDLOCAL(结束本地环境)。

要了解使用的命令及其工作原理,请打开命令提示符 window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。

  • cd /?
  • endlocal /?
  • rem /?
  • setlocal /?
  • popd /?
  • pushd /?