为什么在本地与网络路径上运行时,此Windows批处理文件的行为会有所不同?

时间:2013-06-18 08:23:06

标签: batch-file jenkins

我正在Jenkins中执行Windows批处理文件。脚本的一部分查找匹配*.cover.xml的文件,并在每个文件上运行外部程序。该批处理文件的相关部分如下所示

SETLOCAL ENABLEDELAYEDEXPANSION
SET project_path=\\home\Sonar\8.1
PUSHD %project_path%
FOR /R %%i IN (*.cover.xml) do ncxc.exe %%i
POPD

当我将project_path设置为本地路径时,如D:\MyProj\,它可以完美运行。当我像上面一样使用UNC路径时,会出现问题。第一次运行,它通过。之后每次都失败了!

  

'ncxc.exe'无法识别为内部或外部命令,可运行程序或批处理文件。

我在脚本末尾运行DIR,目录为空! Jenkins服务作为域用户运行,copy命令与网络资源一起使用。 PUSHD将UNC路径安装到驱动器号。

编辑 - 整个批处理文件也以同样的方式失败

set deployment_path=d:\deployment\
SETLOCAL ENABLEDELAYEDEXPANSION
set project_path=Z:\8.1\
pushd %project_path%
set some_path=%CD%
copy %deployment_path%\sppg.exe %CD%\sppg.exe /y
copy %deployment_path%\sonar_main.bat %CD%\sonar_main.bat /y
copy %deployment_path%\utils_all.bat %CD%\Utils\utils.all.bat /y
copy %deployment_path%\dunit2surefire.xsl %CD%\HCPC\dunit2surefire.xsl /y
copy %deployment_path%\xslt2xml.exe %CD%\HPC\xslt2xml.exe /y
copy %deployment_path%\sonar_delphi_all.bat %CD%\HPC\sonar_delphi_all.bat /y
copy %deployment_path%\xslt.bat %CD%\HCPC\Client\xslt.bat /y
copy %deployment_path%\xslt.bat %CD%\HCPC\Server\xslt.bat /y
copy %deployment_path%\ncxc.exe %CD%\ncxc.exe /y
copy %deployment_path%\ncover-converter.bat %CD%\ncover-converter.bat /y
ncxc.exe %CD%
popd
pushd %project_path%
sppg.exe "%CD%" ./Output_AutomatedBuild/TestsResults/Coverage/*.cover.xml

dir Z:
sonar_main.bat
popd

1 个答案:

答案 0 :(得分:0)

如果没有注册表黑客攻击,CMD无法从UNC路径启动。

你的问题似乎有点奇怪。我建议只使用UNC路径进行复制。

set deployment_path=d:\deployment\
SETLOCAL ENABLEDELAYEDEXPANSION
set project_path=\\server\share

copy %deployment_path%\sppg.exe %project_path%\sppg.exe /y

这根本不是问题。试试吧。我还建议永远不要使用%cd%,因为它不能安全地依赖它的内容。

和exe文件:只需给它完整的限定路径。

%project_path%\ncxc.exe ...