问题环境:Windows Server 2008 R2 Build 7601


我有一个批处理文件SomeBatchFile.bat,它使用%~dp0来获取脚本位置。但是,当它从Java程序在Windows Server 2008 R2 Build 7601上执行时,显示出错误的行为。

这是行为,

1)像这样执行时

Process proc= Runtime.getRuntime().exec("c:\\full\\path\\SomeBatchFile.bat");

SomeBatchFile.bat文件保留在C:\full\path中(本质上给出实际的完整路径),返回预期结果c:\full\path\

2)但是当这样执行时

Process proc= Runtime.getRuntime().exec("SomeBatchFile.bat");

SomeBatchFile.bat文件保留在C:\Windows中(本质上是环境变量PATH的一部分的位置)。这将返回错误的值而不是BAT script location,它会从调用此脚本的位置返回java program location

这是我正在使用的脚本文件,

REM Just prints the script location to a file

set MY_HOME=%~dp0
echo %MY_HOME% >> test_out.txt

REM And some other business logic here ...



  在Windows Server 2003上,这绝对可以正常工作。


知道为什么会这样吗?这是Java / Windows错误吗?以及如何解决呢?

最佳答案

如果尝试在相对路径中启动脚本,则还应该尝试以下语法:

Process proc= Runtime.getRuntime().exec(".\\SomeBatchFile.bat");
要么
Process proc= Runtime.getRuntime().exec(".\SomeBatchFile.bat");
要么
Process proc= Runtime.getRuntime().exec("./SomeBatchFile.bat");

三者之一应该起作用。

关于java - 从Java使用Windows 2008 Server时%〜dp0的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32821600/

10-11 21:31