我正在尝试制作一个简单的批处理文件(“javapath.bat”),以便在需要时将 Java 编译器添加到路径中,这样它就不会一直在路径上。我还希望能够@call javapath.bat
在其他构建脚本中执行类似的操作,以便可以在需要时自动添加路径。由于这些将在编辑-保存-编译-运行期间重复运行,这意味着 javapath.bat 需要检查 Java 是否已经在路径上,如果是则不读取它,因为显然微软认为这是一个好主意让路径变量有很多愚蠢的重复。
因此,为了检测是否需要添加它,我使用setlocal
启用“命令扩展”,以便我可以使用环境变量字符串替换的东西。这种丑陋的效果很好。
然后我使用endlocal
这样我就可以实际设置环境变量,而不会在脚本末尾恢复更改。那是行不通的。或者,它肯定会阻止变量更改被还原,但这不正常:它完全阻止它们在本地可见,但之后它们仍然可见。
@echo off
setlocal enableextensions
if "%path:jdk1=%"=="%path%" (
endlocal
set ANT_HOME=C:\Program Files\Java\ant
set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_07
path %ANT_HOME%\bin;%path%
path %JAVA_HOME%\bin;%path%
)
完成上述操作后,正确设置了 ANT_HOME 和 JAVA_HOME。但对 PATH 的唯一更改是“\bin;” 已经添加到它前面,因为脚本期间设置的变量似乎直到之后才可见(因此 ANT_HOME 和 JAVA_HOME 是空白的,并且忘记了对 PATH 的第一次更改)。因此,运行它两次会将 Java 添加到路径中,而不是 Ant。我可以对路径进行两次硬编码,但这种行为非常奇怪和荒谬,我已经坚持了一个小时。
编辑:添加enabledelayedexpansion
也没有效果。