0

我刚刚安装了 jflex 和 cup,我想测试一切是否正常。这是我在 shell 中编写的内容以及得到的结果。 在此处输入图像描述

这是 jflex.bat 文件的内容: 在此处输入图像描述 我做错了什么吗?如何第一次运行 jflex?当我编写 java -version 时,它会在我的电脑中显示正确的 java 版本。问题出在 jflex 上。

谢谢!

4

2 回答 2

1

您需要用双引号将 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 个选项:

  1. 最简单的一个(只会解决这个特定问题):替换

    set JAVA_HOME=C:\Program Files (x86)\Java
    

    set JAVA_HOME="C:\Program Files (x86)\Java"
    

    这样你就可以确保在任何地方使用 JAVA_HOME,你不会因为“文件”周围的空格而遇到更多问题

  2. 去任何你用过%JAVA_HOME%的地方替换它"%JAVA_HOME%"(用双引号括起来)。您可以对 的所有用法执行相同的操作,%JFLEX_HOME%因为这也代表了一个路径

  3. 最后一个选项(最通用的,您应该将其视为批量规则)用双引号将路径的所有表示(文字路径或变量中设置的路径)括起来。

于 2016-11-21T00:04:48.737 回答
1

在你执行的地方%java_home%\bin,你应该

1)%java_home%\bin\java用“双引号”括起来
2)同样,%clpath%用“双引号”括起来

这样,cmd就知道引号之间的内容是单个字符串。

于 2016-11-21T00:04:50.793 回答