我正在尝试使用.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
文件会像预期的那样运行。
我想知道为什么会发生这种情况,我该怎样做才能在我的路径中计算空间?
答案 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 ++),我希望你发现这个答案至少有助于解释这是如何工作的。