繁体   English   中英

使用PowerShell从包含空格的目录运行EXE文件

[英]Running an EXE file using PowerShell from a directory with spaces in it

我正在尝试从C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\Common7\\IDE运行MSTest.exe。 更重要的是,我将当前目录中的所有程序集都设置为单独的/ testcontainer参数。 如果没有PowerShell的抱怨,我无法弄清楚如何做到这一点。

$CurrentDirectory = [IO.Directory]::GetCurrentDirectory()

$MSTestCall = '"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"'

foreach($file in Get-ChildItem $CurrentDirectory) 
{
    if($file.name -match "\S+test\S?.dll$" )
    {
        $MSTestArguments += "/TestContainer:" + $file + " "
    }
}

$MSTestArguments += " /resultsFile:out.trx"
$MSTestArguments += " /testsettings:C:\someDirectory\local64.testsettings"

Invoke-Expression "$MSTestCall $MSTestArguments"

我从这段代码得到的错误是:

Invoke-Expression:您必须在'/'运算符的右侧提供值表达式。

当我尝试在名称中没有空格的目录中调用mstest.exe时,我不会收到此错误(不需要额外的“)。

当我尝试使用&

&$MSTestCall $MSTestArguments

它将$ MSTestArguments作为单个参数交给MSTest提示抛出。 建议?

我建议你使用一系列参数和运算符& 请参阅我在此处的答案中的示例: 执行存储在Powershell变量中的命令

在这种情况下,代码应该是这样的:

$MSTestCall = "C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"
$MSTestArguments = @('/resultsFile:out.trx', '/testsettings:C:\someDirectory\local64.testsettings')

foreach($file in Get-ChildItem $CurrentDirectory)  
{ 
    if($file.name -match "\S+test\S?.dll$" ) 
    { 
        $MSTestArguments += "/TestContainer:" + $file
    } 
} 

& $MSTestCall $MSTestArguments

这有用吗?

$MSTestCall = @'"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe"'@

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM