2012-05-17 9 views
1

мне нужна строка сценария, который делает что-то вроде этого:команды PowerShell в состоянии пакетного сценария

if (results from PowerShell command not empty) do something

Команда PowerShell является в основном

powershell -command "GetInstalledFoo"

Я попытался if (powershell -command "GetInstalledFoo" != "") echo "yes", но получить error -command was unexpected at this time. Можно ли это сделать? Эта команда в конечном счете будет запущена как команда cmd /k.

ответ

3

ответа работы BartekB в если хотя бы одна строка вывода не начинается с символа FOR/F eol (по умолчанию ;) и не состоит полностью из символов разделителя (по умолчанию - пробел и табуляция). С соответствующими параметрами 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 и протестировать ее в своем пакетном файле?

Смежные вопросы