在bat文件中执行另一个程序之前,如何维护bat文件的环境变量?

时间:2019-06-07 11:56:58

标签: windows batch-file command-line-tool

A way to run multiple programs in a bat file.

客观

分发具有GDAL依赖关系的软件。

为此,我从GIS Internals下载了gdal二进制文件。下载的数据具有一个.bat文件来设置环境变量。它使用set命令来设置环境变量。

据我对Windows bash脚本的了解有限,我了解set设置的环境变量仅限于当前命令提示符本身,并在启动新命令提示符时重置。

此外,从批处理文件调用批处理文件是否会启动新的命令提示符,该命令提示符在关闭时不会影响父脚本中调用的下一个命令。

这里还有另一个问题-环境变量会影响Java程序创建的进程(例如调用gdal_translate)吗?如果没有,那么设置本地环境变量毫无意义。


最终要求:

如何在不使用setx的情况下使用父批处理文件下一行中另一个批处理文件(从批处理文件中调用)中设置的环境变量?

1 个答案:

答案 0 :(得分:2)

如果您使用CALL命令运行所链接问题的已接受答案中指定的批处理文件,则环境变量将传递到父批处理文件。

在三遍情况下,为真:

  • 使用SETX时,父批处理文件和子批处理文件都不会获取环境变量。
  • 在子批处理文件中使用SETLOCALENDLOCAL时,父批处理文件将无法获取环境变量。
  • 使用startcmd.exe /c运行子批处理文件时。

只要您在相同的环境(即相同的批处理文件)中运行Java应用程序,它将拾取相同的环境变量。您可以使用Process Explorer之类的应用程序对此进行验证。

在运行set _kjhgkjshdgkjhdfg=TEST文件之前运行.jar会导致以下屏幕截图使用以下任意一种方式:

  • javaw -jar jarfile.jar
  • cmd /c javaw -jar jarfile.jar
  • start cmd /c javaw -jar jarfile.jar

Process Explorer