问题环境: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/