我刚刚安装了 jflex 和 cup,我想测试一切是否正常。这是我在 shell 中编写的内容以及得到的结果。
这是 jflex.bat 文件的内容: 我做错了什么吗?如何第一次运行 jflex?当我编写 java -version 时,它会在我的电脑中显示正确的 java 版本。问题出在 jflex 上。
谢谢!
您需要用双引号将 JAVA_HOME 变量的值括起来,因为它包含空格。JAVA_HOME
包含 Java 环境根目录路径的变量包含空格:C:\Program Files (x86)\Java
. 它用于第三行最后一行:
%JAVA_HOME%\bin\java -classpath...
因此,只需替换您的值即可%JAVA_HOME%
:
C:\Program Files (x86)\bin\java -classpath...
你会说:“它只是 java 可执行文件的路径”。但这不是命令解释器看到它的方式,它会认为你给出了 3 个不同的东西:(C:\Program
Files
(x86)
它只是像往常一样将空格作为参数的分隔符!)。然后它将第一个C:\Program
作为可执行程序的路径,并将该行的其余部分作为其参数。因为C:\Program
不是有效可执行文件的路径,所以您会收到错误
'C:\Program' 未被识别为外部或内部命令`
因此,要让它知道,他总是必须将其C:\Program Files (x86)
视为一个整体(同一事物的一部分:目录的一个路径),您只需用双引号将其括起来。在批处理中,当变量表示路径时,用双引号将变量括起来总是明智的!现在您有 3 个选项:
最简单的一个(只会解决这个特定问题):替换
set JAVA_HOME=C:\Program Files (x86)\Java
和
set JAVA_HOME="C:\Program Files (x86)\Java"
这样你就可以确保在任何地方使用 JAVA_HOME,你不会因为“文件”周围的空格而遇到更多问题
去任何你用过%JAVA_HOME%
的地方替换它"%JAVA_HOME%"
(用双引号括起来)。您可以对 的所有用法执行相同的操作,%JFLEX_HOME%
因为这也代表了一个路径
最后一个选项(最通用的,您应该将其视为批量规则)用双引号将路径的所有表示(文字路径或变量中设置的路径)括起来。
在你执行的地方%java_home%\bin
,你应该
1)%java_home%\bin\java
用“双引号”括起来
2)同样,%clpath%
用“双引号”括起来
这样,cmd
就知道引号之间的内容是单个字符串。