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

Default directory when navigating to a bat (or any) file

我有一个 运行-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 window 会出现并消失。我在其中暂停了一堆以查看它失败的地方。 %jver% 是 17045,所以它超过了那条线。它在 %javacmd% 命令处失败并表示无法找到(或加载)org.testng.TESTNG。当我从我的机器而不是他的机器 运行 它发现它很好。

我唯一的想法是,当我双击 .bat 文件时,它以某种方式将我 CD 到正确的目录,但将他留在他的目录中,以便 SET javacp=-classpath ".;lib/"* 将lib/.设置在自己的目录下,而不是解压后的目录下。我试图弄清楚当你点击一个 .bat 文件时它是否将你 CD 到一个目录但找不到它。

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

双击 .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=
…

解释: