导航到bat(或任何)文件时的默认目录

时间:2016-04-25 12:45:16

标签: java batch-file testng

我有一个run-tests.bat文件,如下所示(提供给我们)。这个bat文件与许多其他文件一起放在一个目录中并被压缩。它是一个独立的testng目录。除了这个文件,在目录中还有子目录lib /和drivers /和lib /确实有testng:

@ECHO OFF@ECHO OFF

SET javacmd=
SET javacp=-classpath ".;lib/*"
SET jvmparams=-Dwebdriver.ie.driver="drivers/IEDriverServer.exe" - Dwebdriver.chrome.driver="drivers/chromedriver.exe"

IF "%JAVA_HOME%"=="" (
    SET javacmd=java
) ELSE (
    SET javacmd="%JAVA_HOME%\bin\java"
)

for /f tokens^=2-5^ delims^=.-_^" %%j in ('%javacmd% -fullversion 2^>^&1')     do set "jver=%%j%%k%%l%%m"
IF %jver% LSS 17000 (
    ECHO Java version is not supported. Please install Java 1.7 or greater.
    GOTO RETURN 
)

%javacmd% %javacp% %jvmparams% org.testng.TestNG testng.xml

:RETURN

IF -%1-==-- (
    PAUSE
)

当我在我的机器上运行它时它工作正常。我需要将它复制到共享目录,以便其他人可以运行它。我将它复制到一个共享目录并测试它,它运行正常。我使用文件浏览器导航,然后双击。

当我让测试人员从他的机器上做到这一点时,cmd窗口就会出现并消失。我把一堆停顿在里面看看它失败了。 %jver%是17045所以它超过了那一行。它在%javacmd%命令失败并且说它无法找到(或加载)org.testng.TESTNG。当我从我的机器上运行它而不是从他的机器上运行时它发现它很好。

我唯一想到的是,当我双击.bat文件时,它以某种方式CD将我带到正确的目录,但将他留在他的目录中以便SET javacp = -classpath“.; lib / ”*将lib / 设置在自己的目录中,而不是放在解压缩的目录中。我试图找出你点击.bat文件时是否将你光盘送到某个目录但是找不到它。

我的理论是为什么它不正确,或者是否有其他原因我没有看到?我验证了我的dos版本和他的版本相同,6.1.7601,我们都使用的是Windows 7,他有Java 7。

1 个答案:

答案 0 :(得分:0)

双击.bat.cmd脚本文件会导致该脚本通常运行 在%HOMEDRIVE%%HOMEPATH%%SystemRoot%\system32起始目录中。我会尝试下一步

@ECHO OFF
SETLOCAL EnableExtensions
echo "%~f0" script started in "%CD%"
pushd "%~dp0"
echo "%~0" script now run in "%CD%"
pause 

rem continue here with your code:
SET javacmd=
…

说明:

  • SETLOCAL EnableExtensions:虽然默认情况下启用了命令扩展,但可以禁用或关闭此命令,请参阅CMD shellcmd /?。正确的确保......
  • "%~f0""%~dp0"参数扩展:请参阅Command Line Argumentscall /?
  • pushd "%~dp0"change the current directory/folder包括磁盘驱动器,另请参阅pushd /?