所有
我正在尝试在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工程师告诉我创建了这个我们使用的软件包,需要在文件名周围加上双引号。虽然对我来说没有意义,但这是我无法解决的问题。
答案 0 :(得分:1)
您可以在文件路径周围添加双引号,如下所示:
Invoke-Expression -Command 'F:\LaserVault\ContentExpress\ContentExpress.exe /CID:1 /CSV:"F:\lvcecstos.csv" /ClearSubscription';
注意命令如何用单引号括起来而不是双引号。
最终,它取决于ContentExpress.exe
程序如何解释文件路径。如您所知,它可以将传递给“CSV”的值附加到“当前工作目录”。
您还可以使用Start-Process
cmdlet,而不是Invoke-Expression
或Invoke-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"
}