如何使用path作为包含空格的参数运行javac?

我试图运行以下

javac -Xlint:unchecked -classpath C:/Users/ab/workspace/ @C:/Users/ab/workspace/files_to_compile 

但我得到了一个

 javac: invalid flag C:/users/a 

我也尝试用双引号括住两个path,但似乎没有帮助一点:

 javac -Xlint:unchecked -classpath "C:/Users/ab/workspace/" @"C:/Users/ab/workspace/files_to_compile" 

我究竟做错了什么? 这个相同的代码在其他计算机上正常工作(可能是因为他们的path中没有任何空格)。

谢谢

你的第二次尝试是正确的

 javac -Xlint:unchecked -classpath "C:/Users/ab/workspace/" @"C:/Users/ab/workspace/files_to_compile" 

但要完成,您必须使用以下命令将空格转义为文本文件“files_to_compile”:

  • 与属性文件相同的语法:\

要么

  • 双引号每行

我建议第二,但我不知道。

我终于想出了解决这个问题的办法,我想这里没人能猜到。

答案的提示在于,文件列表的内容(在args中用@表示)通常将其每个字符串的初始子字符串与作为类路径和@文件所传递的内容相等。

所以..

麻烦是从来没有命令行参数,建议,但与@文件的内容。

文件的每一行必须放在它自己的行中,用引号括起来,并考虑到如果你在窗口中,你必须把文件名称的形式是C:\\a\\b\\c.txt !!!

我不得不承认这比我想像的要困难得多。 经过一些试验和错误,我想出了以下几点:

C:\ Program Files \ Java \ jdk1.7.0_07 \ bin \ javac“-cp”c:\ lol \ ab; c:\ lol \ foo bar“Lol.java

文件夹结构如下所示:

 ./foo bar ./foo bar/Moo.java ./Lol.java ./ab ./ab/AB.java 

我做了一个文件夹和Java文件的档案,你可以在http://www.pvv.ntnu.no/~rakhmato/tmp/lol.tar

你应该忽略@选项,因为它足以给编译器一个文件和一个合适的类路径,它可以找出所有东西都在自己的位置。 只要给你的Main.java编译器,它会弄清楚这个文件依赖于什么。

我也建议你编写一个.bat脚本来使事情更简单。 没有什么奇特的,像这样:

的compile.bat:

“C:\ Program Files \ Java \ jdk1.7.0_07 \ bin \ javac”-classpath“c:\ lol \ ab; c:\ lol \ foo bar”Main.java

..put在你的项目文件夹,并从CMD运行compile.bat

  • 首先在shell中使用cd命令将您的目录切换到保存文件的目录。

     cd /home/sayantani/PERSONAL\ FILES/sem\ 4\ courses/PLC/code/ 
  • 请注意,每当涉及空间时,我都使用“\”。 “个人文件”变成“个人\文件”。

  • 然后使用“javac filename.java”

     javac hello1.java 

这应该解决您的问题。 请注意,从默认目录的整个路径上执行“javac”不起作用。(对我来说)

你需要逃避空间。

\放在每个空间的前面,并尝试。

它只取得源字符串的第一部分,从路径中删除ab之间的空间,它应该工作正常C:/Users/a_b/workspace/" @"C:/Users/a_b/workspace/files_to_compile" 。在路径中有空格,否则后面的部分将被编译器忽略,否则你可以在a\ b之间加a\ b '\'

但是如果你使用的是Windows 7,你可以使用mklink实用工具创建另一个文件夹指向同一个地方,但是没有空格。

编辑:也许更好的解决方案:

 cd "C:/Users/ab/" javac ... -classpath "Workspace" ... 

从“java /?”的使用信息

 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC>cd "C:\Program Files (x86)\Java\jre6\bin" C:\Program Files (x86)\Java\jre6\bin>java.exe Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file) where options include: -client to select the "client" VM -server to select the "server" VM -hotspot is a synonym for the "client" VM [deprecated] The default VM is client. -cp <class search path of directories and zip/jar files> -classpath <class search path of directories and zip/jar files> A ; separated list of directories, JAR archives, and ZIP archives to search for class files. 

-classpath表示您需要为多个路径使用分号(“;”)。

我不能测试它,但我会建议以下(作为dmcgil建议分号应该是Windows上的类路径分隔符):

 javac -Xlint:unchecked -classpath C:\Users\a^ b\workspace\;C:\Users\a^ b\workspace\files_to_compile 

看起来, 胜利外壳的逃生charachter是可爱的 。

这也是在这里建议的。

编辑:

另外,在你的问题中,我注意到在路径中使用斜杠(/),是不是所有版本的Windows都使用反斜杠(\)作为文件分隔符? 我在这个线程的某个地方看到了你的评论,所以我认为你有错误的地方。