如果路径中有空格,为什么我的批处理文件会出错?

时间:2017-03-07 23:46:16

标签: java windows file batch-file cmd

我正在尝试使用.jar文件运行.bat文件。但是当我的路径中有空格时,我的批处理文件会出错。 例如,

@echo off
java -jar %~dp0\..\new\myFile.jar %*

这是我的批处理文件的内容。我知道%~dp0会将当前的 d 铆钉字母和 p ath提供给我的批处理文件,然后\..\会返回到它#39} ; s父目录,然后它将打开new目录并从中运行jar文件。

但问题是,如果我的路径中包含空格,则批处理文件会出错:

Error: Unable to access jarfile C:\Users\Vatsal

假设.jar文件的路径是:

C:\Users\Vatsal Sura\myFolder\new\myFile.jar
我的.bat文件的

和路径是:

C:\Users\Vatsal Sura\myFolder\batch\batchFile.bat

现在,如果我直接在myFolder移动C:\,其中不包含任何空格,那么它就不会给出任何错误和.jar文件会像预期的那样运行。

我想知道为什么会发生这种情况,我该怎样做才能在我的路径中计算空间?

2 个答案:

答案 0 :(得分:2)

将违规部分放在双引号中:f = open('file.txt', 'w') f.write(VarA + '\n' ) f.write(VarB + '\n' ) f.write(VarC + '\n' ) f.write(VarD + '\n' ) f.write(VarE + '\n' ) f.write(VarF1 + '\n' ) f.write(VarF2 + '\n' ) f.write(VarF3 + '\n' ) f.write(VarF4 + '\n' ) f.write(VarF5 + '\n' ) f.close()

如果展开为java -jar "%~dp0\..\new\myFile.jar" %*,那么没有引号,C:\Users\Vatsal Sura\myFolder\new\myFile.jar只会看到第一个空格,因为它的参数(即-jar)和其余部分(-jar C:\Users\Vatsal {1}})是与Sura\myFolder\new\myFile.jar

无关的完全不同的论点

您需要使shell / cmd将所有内容视为一个参数。双引号仍然允许任何扩展发生,但引号内的所有内容都将被视为单个项目(当java看到它时,引号不会出现)。

答案 1 :(得分:0)

问题的原因很简单

批次很简单, Windows需要创建命令行,powershell,blah blah,以及它的强大功能。但是,批处理只运行在一个编程的代码行上,是的,它令人困惑的大声笑,但是当你编写代码时,它与二进制文件相比没什么。批量不是太高级,因此当它在命令的“heart”中时不会处理空格,就像我这样做它确实有相同的错误,但批处理可以区分:

ec ho

(应该是回声) 无论如何,一个简单的问题解决方案可能是改变你的批处理文件正在处理的编码,或者只是简单地取出你目录上的空格。

另外,请勿使用

%~dp0\

(它suks)

相反,为了简化这一点,只需执行

@echo off
java -jar %CD%\new\myFile.jar %*

您甚至不必将%CD%设置为只是自动使用当前目录的任何内容。 *即便如此,您的初始问题也无法解决。如果你改变了编码(使用notepad ++),我希望你发现这个答案至少有助于解释这是如何工作的。