2

我面临以下批处理脚本的问题,我必须在批处理文件中提供硬编码路径的相对路径。

下面是我的soapUI cmd 行执行文件,其中soapui-settings.xml 是包含我所有soap 设置的文件,project.xml 是包含我的测试用例的文件。我在这里有硬编码的路径。因为我要签入这个文件,如果任何其他人执行这个文件将不起作用,因为他们的机器上不存在该路径。我如何在 Windows 上实现这一点?有没有一种方法可以在我的批处理文件中使用相对路径来硬编码并运行它?

这是我的示例文件:

cd C:\soapui4.5\soapUI-Pro-4.5.0\bin  
testrunner.bat -tC:\Users\jvihol\soapui-settings.xml C:\Users\jvihol\Documents\April-RTM-soapui-project.xml

任何帮助将非常感激。谢谢。:)

4

3 回答 3

5

这是我用来解决不断变化的路径的技巧。简而言之,

  1. 使所有路径相对于批处理文件位置,并且
  2. 使批处理文件更改其自己的工作目录。

如果您调用的工具位于路径中,或者位于由环境变量定义的位置,这将很有帮助。

像这样的东西:

@echo off

pushd %~dp0

REM Here you are executing in the same directory as the batch file
REM You can make your path relative to here

popd

对于您的项目,您可以将其%~dp0用作绝对路径的占位符。

pushd C:\soapui4.5\soapUI-Pro-4.5.0\bin 
testrunner.bat -EDefault -I -t%~dp0soapui-settings.xml %~dp0April-RTM-soapui-project.xml
popd
于 2012-05-23T03:09:12.797 回答
1

从相对路径获取绝对路径需要有人进行一些计算。我知道的三个选项是:i)一个只做路径计算的附加程序,ii)使用“当前目录”,以及 iii)将两条路径粉碎在一起。以下是方法 ii) 和 iii) 的粗略说明:

REM example "givens"
set DRIVE=C:
set ROOTPATH=\fee\fie\fo
set RELPATH=funky\stuff
set FILENAME=blarf.txt

REM method ii) using the "current directory" functionality
%DRIVE%
cd %ROOTPATH%
cd %RELPATH%
more %FILENAME%

REM method iii) using explicit concatenation
set FULLPATH=%DRIVE%%ROOTPATH%\%RELPATH%
set PATHFILENAME=%FULLPATH%\%FILENAME%
more %PATHFILENAME%

REM DOS/BAT handling of drive letter is odd (is it part of the path, or not?)
REM It may be necessary to use "cd /D ..."

REM Path calculations are easier 
REM so long as DOS/BAT understands that "\\" is the same as "\"
于 2012-05-23T00:53:29.230 回答
0

也许你想要这个:

cd C:\soapui4.5\soapUI-Pro-4.5.0\bin  
testrunner.bat -t%USERPROFILE%\soapui-settings.xml %USERPROFILE%\Documents\April-RTM-soapui-project.xml

USERPROFILE是一个系统环境变量,包含当前用户主目录的路径。在您的会话中,它将评估为

C:\Users\jvihol

在别人的,到

C:\Users\someone else's user name
于 2012-05-23T12:39:19.647 回答