【问题标题】:Is it a best practice to change the current work directory in the batch file?更改批处理文件中的当前工作目录是最佳做法吗?
【发布时间】:2017-05-11 08:47:12
【问题描述】:

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

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

【问题讨论】:

  • 注意,cd 有有用的/d 参数。 pushd/popd 是另一种选择。

标签: batch-file command working-directory


【解决方案1】:

MagooStephan 已经建议了一种方法:

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 时设置的目录。

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

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

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

【讨论】:

    【解决方案2】:

    试试

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

    作为另一种选择。

    最佳实践取决于意见和情况

    【讨论】:

      猜你喜欢
      • 2011-07-05
      • 2013-09-25
      • 1970-01-01
      • 2010-09-19
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多