在 windows 8.1 中不能 运行 jflex.bat

Can't run jflex.bat in windows 8.1

刚刚安装了jflex和cup,想测试一下是否一切正常。 这是我在 shell 中写的内容和我得到的结果。

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

谢谢!

您需要用双引号将 JAVA_HOME 变量的值括起来,因为它包含空格 包含 java 环境根目录路径的 JAVA_HOME 变量包含空格:C:\Program Files (x86)\Java。它用在倒数第三行:

%JAVA_HOME%\bin\java -classpath...

因此,只要代入 %JAVA_HOME% 的值,您就会得到:

C:\Program Files (x86)\bin\java -classpath...

你会说:"it's just a path to the java executable"。但这不是命令解释器的看法,它会认为你给出了 3 个不同的东西:C:\Program Files (x86)(它只是像往常一样将空格作为参数的分隔符!)。然后它将第一个 C:\Program 作为可执行程序的路径,并将该行的其余部分作为其参数。因为 C:\Program 不是有效可执行文件的路径,所以您得到错误

'C:\Program' is not recognized as an external or internal command`

因此,要让它知道他总是必须将 C:\Program Files (x86) 视为一个整体(同一事物的一部分:目录的一条路径),您只需用双引号将其括起来。在批处理中,当变量表示路径时用双引号括起来总是明智的!现在你有 3 个选项:

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

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

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

    这样你就可以确保在任何地方都使用 JAVA_HOME,你不会再因为 "Files"

  2. 周围的空格而出现问题
  3. 去所有你用过 %JAVA_HOME% 的地方,用 "%JAVA_HOME%" 替换它(用双引号括起来)。您可以对 %JFLEX_HOME% 的所有用法执行相同的操作,因为这也代表路径

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

你在哪里执行%java_home%\bin,你应该

1) 在"Double Quotes"
中包含%java_home%\bin\java 2) 同样,将 %clpath% 括在 "Double Quotes"

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