2012-05-17 156 views
1

我需要一個行腳本,做這樣的事情:PowerShell命令

if (results from PowerShell command not empty) do something

PowerShell命令基本上是

powershell -command "GetInstalledFoo"

我試圖if (powershell -command "GetInstalledFoo" != "") echo "yes",但得到的錯誤-command was unexpected at this time.這可能實現嗎?該命令最終將作爲cmd /k的命令運行。

回答

3

BartekB的答案作品只要至少有一行輸出不以FOR/FOL字符開始(默認爲;),並且不完全由分隔符(缺省爲空格和製表符)組成。有了適當的FOR/F選項,它可以始終工作。

但是,這是一個更簡單(我相信更快)的方式來處理應始終工作的多行輸出。

for /f %%A in ('powershell -noprofile -command gwmi win32_process ^| find /v /c ""') do if %%A gtr 0 echo yes 

另一種選擇是使用臨時文件。

powershell -noprofile -command gwmi win32_process >temp.txt 
for %%F in (temp.txt) if %%~zF gtr 0 echo yes 
del temp.txt 
1

我想如果不會是最好的解決方案。我會用for /f代替:

for /f %R in ('powershell -noprofile -command echo foo') do @echo bar 

這應該給你 '吧',而這一點:

for /f %R in ('powershell -noprofile -command $null') do @echo bar 

...不應該。在實際的.bat/.cmd文件,你必須更好的一倍%(%% R)

,或者,如果你不想多巴的回...:

(for /f %R in ('powershell -noprofile -command gwmi win32_process') do @echo bar) | find "bar" > nul && echo worked 
2

第三種方法:從PowerShell腳本中設置一個環境變量並在批處理文件中測試它?