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

Batch file 更改批处理文件中的当前工作目录是最佳做法吗?,batch-file,command,working-directory,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所在的文件夹,以便它找到

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

这是我的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。这样做是否最佳做法?在执行批处理文件之前更改当前工作目录。

请尝试

pushd C:\Program Files\MyApplication
...
popd
作为另一种选择

最佳实践是意见和环境的问题

试试看

pushd C:\Program Files\MyApplication
...
popd
作为另一种选择

最佳实践是一个意见和环境的问题

一种方法是我们已经提出的:

pushd "%ProgramFiles%\MyApplication"

rem Other commands.

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

另一种解决方案是使用SETLOCALCDENDLOCAL,其优点是所有环境变量的修改,
setlocal
endlocal
之间的命令执行的命令扩展和延迟扩展对于
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(pop目录)、SETLOCAL(设置本地环境)、CD(更改目录)和ENDLOCAL(结束本地环境)的详细信息,请参见上的答案

要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

  • cd/?
  • endlocal/?
  • rem/?
  • setlocal/?
  • popd/?
  • pushd/?
    • 一种方法是我们已经提出的:

      pushd "%ProgramFiles%\MyApplication"
      
      rem Other commands.
      
      popd
      
      此解决方案甚至适用于启用了命令扩展名的UNC路径,默认情况下为PUSHD临时将网络共享映射到驱动器号,并使此网络驱动器成为当前目录

      另一种解决方案是使用SETLOCALCDENDLOCAL,其优点是所有环境变量的修改,
      setlocal
      endlocal
      之间的命令执行的命令扩展和延迟扩展对于
      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(pop目录)、SETLOCAL(设置本地环境)、CD(更改目录)和ENDLOCAL(结束本地环境)的详细信息,请参见上的答案

      要了解所使用的命令及其工作方式,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

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

      注意,
      cd
      具有有用的
      /d
      参数
      pushd
      /
      popd
      是另一个选项。注意,
      cd
      具有有用的
      /d
      参数
      pushd
      /
      popd
      是另一个选项。