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

标签 java windows file batch-file cmd

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

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

这是我的批处理文件的内容。我知道 %~dp0 会将当前的 drive letter 和 path 提供给我的批处理文件,然后 \..\ 将返回到它的父目录,然后它将打开 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 文件将按预期运行。

我想知道为什么会发生这种情况,以及我应该怎样做才能使路径中的空格有效?

最佳答案

将有问题的部分放在双引号中:java -jar "%~dp0\..\new\myFile.jar"%*

如果扩展名是 C:\Users\Vatsal Sura\myFolder\new\myFile.jar,则不带引号,-jar 只能看到第一个空间作为它的参数(即 -jar C:\Users\Vatsal),其余部分(Sura\myFolder\new\myFile.jar)是一个完全不同的参数,不相关到 -jar

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

关于java - 如果我的批处理文件路径中有空格,为什么会出现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42660480/

相关文章:

windows - 如果防火墙打开,Java 7 会阻止 Windows Vista 和 7 上的 FTP 传输。有任何想法吗?

c# - ngen 是如何工作的?

java - 删除文本文件中较短的字符串

file - 我如何在java中打开并运行(执行)文件?

java - 使用证书的 SSL 连接

java - 列表数组元素应该包装在 xml 表示中吗?

java - 无法在 Eclipse Oxygen 3.3 的 POM.xml 的依赖项选项卡中找到存储库

java - 使用内部类强制转换代理 Java 类

c++ - 为什么以下代码会使我的计算机发出蜂鸣声?

java - 如何用java编写文件搜索程序?