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

时间:2017-05-11 08:47:12

标签: batch-file command working-directory

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

以下是我的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所在的文件夹,以便找到位于该文件夹中的某些必需的JAR。是否最好这样做?在执行之前更改当前的工作目录批处理文件。

2 个答案:

答案 0 :(得分:4)

尝试

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

作为另一种选择。

最佳做法是意见和环境问题

答案 1 :(得分:2)

一种方法是MagooStephan已经建议的方法:

pushd "%ProgramFiles%\MyApplication"

rem Other commands.

popd

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

另一个解决方案是使用 SETLOCAL CD ENDLOCAL ,它具有环境变量,命令扩展和延迟扩展的所有修改的优势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 时设置。

请参阅change directory command cd ..not working in batch file after npm install上的答案,详细了解 PUSHD (推送目录), POPD (热门目录), SETLOCAL (设置本地环境), CD (更改目录)和 ENDLOCAL (结束本地环境)。

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

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