导航到 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=
…
解释:
SETLOCAL EnableExtensions
:虽然命令扩展默认启用,但可以禁用或关闭,请参阅 CMD shell 或 cmd /?
。正确确保…
"%~f0"
、"%~dp0"
参数扩展:参见 Command Line Arguments 或 call /?
。
pushd "%~dp0"
:change the current directory/folder 包括磁盘驱动器,另请参阅 pushd /?
。
我有一个 运行-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=
…
解释:
SETLOCAL EnableExtensions
:虽然命令扩展默认启用,但可以禁用或关闭,请参阅 CMD shell 或cmd /?
。正确确保…"%~f0"
、"%~dp0"
参数扩展:参见 Command Line Arguments 或call /?
。pushd "%~dp0"
:change the current directory/folder 包括磁盘驱动器,另请参阅pushd /?
。