Invoke-Expression -Command即使它存在也找不到文件

时间:2014-01-13 15:50:28

标签: powershell exe

所有

我正在尝试在Power Shell中运行命令,并且我被告知该文件不存在,因为它现在正处于Power Shell代码中。如果我在DOS中执行相同操作,它会找到该文件并正确执行。唯一的区别是文件名周围有一个额外的打开和关闭双引号。这可以用Power Shell以同样的方式完成吗?如果是这样,我怎么能这样做,因为我不熟悉Power Shell。

DOS:

如果出现F:\ lvcecstos.CSV F:\ LaserVault \ ContentExpress \ ContentExpress.exe / CID:1 /CSV:"F:\lvcecstos.CSV“ / ClearSubscription

Power Shell:

Invoke-Expression -Command“F:\ LaserVault \ ContentExpress \ ContentExpress.exe / CID:1 / CSV: F:\ lvcecstos.csv / ClearSubscription”

提前感谢任何建议。 LaserVault工程师告诉我创建了这个我们使用的软件包,需要在文件名周围加上双引号。虽然对我来说没有意义,但这是我无法解决的问题。

3 个答案:

答案 0 :(得分:1)

您可以在文件路径周围添加双引号,如下所示:

Invoke-Expression -Command 'F:\LaserVault\ContentExpress\ContentExpress.exe /CID:1 /CSV:"F:\lvcecstos.csv" /ClearSubscription';

注意命令如何用单引号括起来而不是双引号。

最终,它取决于ContentExpress.exe程序如何解释文件路径。如您所知,它可以将传递给“CSV”的值附加到“当前工作目录”。

您还可以使用Start-Process cmdlet,而不是Invoke-ExpressionInvoke-Command

$Program = 'F:\LaserVault\ContentExpress\ContentExpress.exe';
$ArgumentList = '/CID:1 /CSV:"F:\lvcecstos.csv" /ClearSubscription';
Start-Process -Wait -NoNewWindow -FilePath $Program -ArgumentList $ArgumentList;

答案 1 :(得分:1)

如果你有PowerShell v3(你应该这样做),你可以使用“魔术参数”--%(见here)。

& F:\LaserVault\ContentExpress\ContentExpress.exe --% /CID:1 /CSV:"F:\lvcecstos.csv" /ClearSubscription

否则,试图在参数周围保留双引号可能会非常非常非常痛苦。例如,请参阅this answer类似的问题。

答案 2 :(得分:0)

$lvcecstos = "F:\lvcecstos.CSV"
If(Test-Path $lvcecstos)
{
    Invoke-Expression -Command "& F:\LaserVault\ContentExpress\ContentExpress.exe /CID:1 /CSV:$lvcecstos /ClearSubscription"
}