通过bat文件执行时文件路径中的转义符

时间:2019-02-05 16:09:43

标签: windows batch-file cmd command-line filepath

我正在尝试启动一个Java进程,使用bat文件将几个参数传递给它。但是问题在于,使用以下命令时,cmd仅会跳转而不显示任何内容:

start cmd/C 

因此使其成为

start cmd/K 

给出一个显示该错误的弹出cmd

'C:\ New'不被识别为内部或外部命令,可操作程序或批处理文件。

出于测试目的以重现问题,您可以通过以下示例启动Java进程。

我已经在寻找解决方案,但是唯一类似于该问题的方法是使用set,然后再使用该参数。 设置“ var = content”

回显正确地打印出包含许多空格的文件夹,例如:“ C:\ New Folder and Spaces”
代码如下:

SET "currDir=%~dp0" 
echo %currDir% 
start cmd /K "%currDir%"..\jvm\jre\bin\java.exe -version

如何在其中包含空格的情况下传递〜dp0 值而又不会出现上述错误?如果我应该在启动命令中多次使用它,该怎么办?

start cmd /K "%currDir%"..\jvm\jre\bin\java.exe -version -Djava.awt.headless=true %JAVA_OPTIONS% -jar "%~dp0MyJar.jar" -home "%~dp0.." %*

2 个答案:

答案 0 :(得分:0)

为什么不使用%~dp0%和使用引号引起来的附件?

    set currDir=%~dp0

    echo "%currDir%"
    "%~dp0%..\jvm\jre\bin\java.exe" -version
  

    set currDir=%~dp0

    echo "%currDir%" & "%~dp0%..\jvm\jre\bin\java.exe" -version
    timeout /t -1 
  

就像您在此部分中使用的一样:: “%〜dp0MyJar.jar” ::

start cmd /K "%currDir%..\jvm\jre\bin\java.exe" -version -Djava.awt.headless=true %JAVA_OPTIONS% -jar "%~dp0MyJar.jar" -home "%~dp0.." %*

此外,如果要设置some =一些字符串,其值后有空格,则空格将是字符串的一部分:set "_this=this ",因此,请检查/删除代码中字符串/值中的任何可能空格。

答案 1 :(得分:0)

希望文件名和文件夹名短,因为它们从未包含空格,该怎么办?试试:

set currDir=%~sdp0

(有关更多信息,请访问ss64!)

干杯, 尼古拉