Windows 奇怪的java命令行文件夹路径问题

Windows 奇怪的java命令行文件夹路径问题,windows,cmd,command-line-arguments,Windows,Cmd,Command Line Arguments,我有一个接收路径作为命令行参数的应用程序。路径可以包含空格,因此可以使用引号发送。我需要验证此路径是否正确,因此我从“File”类执行“exists”方法: public static void main (String... args) { System.out.println("arg=" + args[0]); File f = new File(args[0]); System.out.println("exists=" + f.exists()); } 当我使用以下参数运

我有一个接收路径作为命令行参数的应用程序。路径可以包含空格,因此可以使用引号发送。我需要验证此路径是否正确,因此我从“File”类执行“exists”方法:

public static void main (String... args) {
  System.out.println("arg=" + args[0]);
  File f = new File(args[0]);
  System.out.println("exists=" + f.exists());
}
当我使用以下参数运行应用程序时,我得到了这个结果(假设“c:\folder”存在)。请注意最后的斜杠和引号:

> java Test c:\folder
args=c:\folder
exists=true

> java Test c:\folder\
args=c:\folder\
exists=true

> java Test "c:\folder"
args=c:\folder
exists=true

> java Test "c:\folder\"
args=c:\folder
exists=false
我不明白最后一个例子发生了什么。首先在args结果中不打印最终斜杠,然后文件类说路径不存在。第二个没有引号的例子效果很好。
参数路径有一个免费的用户版本,所以它可以包括引号(如果路径有带空格的文件夹)和最后一个斜杠。

这不是java问题,而是您的shell<代码>\如果它在Windows中的
之前使用,则充当转义字符。要解决此问题,可以将参数写为
“c:\folder\\”


这也是一个奇怪的输出。当我这样做时,我得到了上一个例子中的
args=c:\folder“

这不是java问题,而是您的shell<代码>\如果它在Windows中的
之前使用,则充当转义字符。要解决此问题,可以将参数写为
“c:\folder\\”


这也是一个奇怪的输出。当我做同样的操作时,我得到了
args=c:\folder“
,在最后一种情况下。

\“是一个转义的”。研究角色逃跑。你解决了这个问题吗?看起来talex的解决方案很有效,但最后两个斜杠有点难看。无论如何,我还没有找到更好的方法来处理这个问题。\“是一个逃犯”。研究角色逃跑。你解决了这个问题吗?看起来talex的解决方案很有效,但最后两个斜杠有点难看。无论如何,我还没有找到更好的方法来处理这个问题。