Войти

Показать полную графическую версию : [решено] Некорректная отработка оператора SET в теле IF


8ash8
10-12-2015, 15:00
Добрый день, в процессе адаптации ранее написанного скрипта столкнулся с проблемой: (не работает присвоение переменной в условном операторе).

For /F "tokens=2* delims==" %%A In ('wmic PRODUCT where Name^="McAfee Agent" GET IdentifyingNumber /value^|Findstr "="') Do (Set MA=%%A)
if not defined MA Set /a K=1
Echo %Key%
For /F "tokens=2* delims==" %%A In ('wmic PRODUCT where Name^="Java Auto Updater" GET IdentifyingNumber /value^|Findstr "="') Do (Set JAU=%%A)
if not defined JAU Set /a K=K+1
Echo %Key%

но при внесения скрипта в тело условного оператора присвоение "K=1" не работает и счетчик начинает считать на следующем шаге, с чем это может быть связанно?
Set /a Ins=1
if defined Ins (
For /F "tokens=2* delims==" %%A In ('wmic PRODUCT where Name^="Java Auto Updater" GET IdentifyingNumber /value^|Findstr "="') Do (Set JAU=%%A)) &
if not defined JAU Set /a K=1 & Echo %K% & (
For /F "tokens=2* delims==" %%A In ('wmic PRODUCT where Name^="McAfee Agent" GET IdentifyingNumber /value^|Findstr "="') Do (Set MA=%%A)) &
if not defined MA Set /a K=K+1 & Echo %K%
pause

но без IF счетчик нормально работает

For /F "tokens=2* delims==" %%A In ('wmic PRODUCT where Name^="McAfee Agent" GET IdentifyingNumber /value^|Findstr "="') Do (Set MA=%%A)
if not defined MA Set /a Key=Key+1
Echo %Key%
For /F "tokens=2* delims==" %%A In ('wmic PRODUCT where Name^="Java Auto Updater" GET IdentifyingNumber /value^|Findstr "="') Do (Set JAU=%%A)
if not defined JAU Set /a Key=Key+1
Echo %Key%

И второй вопрос, при корректной отработки For /F "tokens=2* delims==" %%A In ('wmic PRODUCT where Name^="McAfee Agent" GET IdentifyingNumber /value^|Findstr "="') Do (Set MA=%%A) записи в случае отсутствия условия выводится сообщение No Instance(s) Available. согласен, в этом случае замечание системы уместно, но как можно запретить вывод этого сообщения?

Foreigner
10-12-2015, 15:15
setlocal /?



@echo off
setlocal enabledelayedexpansion
set a=1
if %a% equ 1 (

set /a a+=1 & echo !a! & echo %a%

)

c4uran
10-12-2015, 15:56
по поводу No Instance(s) Available
можно супер костыль добавить:

for ... %%A in (... ) Do (
%%A | findstr /ivc:"No Instance"&&Set JAU=%%A
)

а вообще нужно читать ману по wmic /?

Foreigner
10-12-2015, 16:31
c4uran, Да можно просто перенаправить поток ошибок в nul (2>nul):

@echo off
setlocal

set "wmic=wmic PRODUCT where Name="McAfee Agent" GET IdentifyingNumber /value"

for /f "tokens=*" %%i in ('"2>nul %wmic%"') do 1>nul set "%%i"

if defined IdentifyingNumber echo %IdentifyingNumber%




© OSzone.net 2001-2012