1

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

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.

4

3 回答 3

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
于 2012-05-17T22:23:16.837 回答
2

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

于 2012-05-18T05:44:07.673 回答
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
于 2012-05-17T21:15:05.513 回答