批处理脚本条件下的PowerShell命令

时间:2012-05-17 20:59:14

标签: windows powershell batch-file

我需要一行脚本来做这样的事情:

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 个答案:

答案 0 :(得分:3)

只要至少有一行输出不以FOR / F eol字符(默认为;)开头并且不完全由分隔符(默认为空格和制表符)组成,BartekB的答案就有效。通过适当的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 :(得分:2)

第三种方法:从PowerShell脚本设置环境变量并在批处理文件中对其进行测试?

答案 2 :(得分: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