背景
安装的Scala 2.13.0,看报错是因为少了引号转义。
不过实际看代码发现情况有点离谱。
解决方案
把scala.bat中的:add_cpath子程序换成下面这样
:add_cpath
if "%_TOOL_CLASSPATH%"=="" (
call :add_cpath_set "%~1"
) else (
call :add_cpath_add "%~1"
)
echo %_TOOL_CLASSPATH%
goto :eof
:add_cpath_set
set _TOOL_CLASSPATH=%~1
goto :eof
:add_cpath_add
set _TOOL_CLASSPATH=%_TOOL_CLASSPATH%;%~1
goto :eof
原因分析
在if语句中set语句语法不一样。
是的,当我得出这个结论的时候觉得非常震惊,怎么能有一个语言的语句放在if内外语法不一样的?
可以新建一个.bat文件测试,下面这个会报错。
echo on
set VAR_A=D:\Program Files (x86)\scala\bin\..\lib\jline-2.14.6.jar
set VAR_B=
echo CURRENT VAR_B=%VAR_B%
if "1"=="1" (
set VAR_B=%VAR_A%
)
然后另外写一个,这个就不报错。
echo on
set VAR_A=D:\Program Files (x86)\scala\bin\..\lib\jline-2.14.6.jar
set VAR_B=
echo CURRENT VAR_B=%VAR_B%
set VAR_B=%VAR_A%
非常离谱的事情,除了一个set在if里面,一个set在if外面,两者一幕一样。
所以把这个bat改对的唯一方法就是不要让set出现在if语句里面,那么就只好新建两个子程序,分别放if的两个分支了。
标签:bin,set,lib,scala,TOOL,add,cpath,报错,VAR From: https://www.cnblogs.com/FinnTenzor/p/16647023.html