如何从Power Shell脚本执行进程?

时间:2018-01-09 18:54:51

标签: powershell

我正在尝试从power shell脚本执行一个进程:

$covFiles = Get-ChildItem -Name -Path .\ -Include Cov*.xml
for ($i=0; $i -lt $covFiles.Count; $i++) {
  $covFile = $covFiles[$i]
  $idx = $covFile.IndexOf("_")
  $covPlatform = $covFile.SubString(3, 3)
  $covFilter =  $covPlatform + "_" + $covFile.SubString($idx + 1).TrimEnd(".xml")
  $command = "-f " + $covFile + " -F " + $covFilter
  & codecov $command
}

工作目录包含名为的文件,例如: - CovEGLOpenGL.Net.Test_net461_x86_Release.xml - CovWGLOpenGL.Net.CoreUI.Test_net461_x64_Release ...

如果我用& echo $command回显命令,它在本地计算机上按预期工作。

但在AppVeyor上,流程输出:

codecov.exe : The filename, directory name, or volume label syntax is incorrect.
At line:8 char:3
+   & codecov $command
+   ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (The filename, d...x is incorrect.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

FIND: Parameter format not correct

这让我觉得参数规范有问题。可以引用吗?

codecov替换echo,本地输出:

-f CovEGLOpenGL.Net.CoreUI.Test_net461_x64_Release.xml -F EGL_net461_x64_Release
-f CovEGLOpenGL.Net.CoreUI.Test_net461_x86_Release.xml -F EGL_net461_x86_Release
-f CovEGLOpenGL.Net.Test_net35_x64_Release.xml -F EGL_net35_x64_Release
-f CovEGLOpenGL.Net.Test_net35_x86_Release.xml -F EGL_net35_x86_Release
-f CovEGLOpenGL.Net.Test_net461_x64_Release.xml -F EGL_net461_x64_Release
-f CovEGLOpenGL.Net.Test_net461_x86_Release.xml -F EGL_net461_x86_Release
-f CovWGLOpenGL.Net.CoreUI.Test_net461_AnyCPU_Release.xml -F WGL_net461_AnyCPU_Release
-f CovWGLOpenGL.Net.CoreUI.Test_net461_x64_Release.xml -F WGL_net461_x64_Release
-f CovWGLOpenGL.Net.CoreUI.Test_net461_x86_Release.xml -F WGL_net461_x86_Release
-f CovWGLOpenGL.Net.Test_net35_AnyCPU_Release.xml -F WGL_net35_AnyCPU_Release
-f CovWGLOpenGL.Net.Test_net35_x64_Release.xml -F WGL_net35_x64_Release
-f CovWGLOpenGL.Net.Test_net35_x86_Release.xml -F WGL_net35_x86_Release
-f CovWGLOpenGL.Net.Test_net461_AnyCPU_Release.xml -F WGL_net461_AnyCPU_Release
-f CovWGLOpenGL.Net.Test_net461_x64_Release.xml -F WGL_net461_x64_Release
-f CovWGLOpenGL.Net.Test_net461_x86_Release.xml -F WGL_net461_x86_Release

1 个答案:

答案 0 :(得分:1)

这可以解决您遇到的问题:

$covFiles = Get-ChildItem -Filter cov*.xml

ForEach ($File in $covFiles)
{
    $Path = $File.FullName
    $idx = $Path.IndexOf("_")
    $Platform = $Path.Substring(3, 3)
    $Filter = "${Platform}_$($Path.Substring($idx+1).TrimEnd('.xml'))"

    $ArgList = @(
        '-f',"`"$Path`""
        '-F',"`"$Filter`""
    )
    Start-Process -FilePath codecov -ArgumentList $ArgList
}

我怀疑你遇到的问题是由于相对路径造成的。

相关问题