Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Некорректная отработка оператора SET в теле IF (http://forum.oszone.net/showthread.php?t=309026)

8ash8 10-12-2015 15:00 2583403

Некорректная отработка оператора SET в теле 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 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 2583410

Код:

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 2583426

по поводу No Instance(s) Available
можно супер костыль добавить:

Код:

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

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

Foreigner 10-12-2015 16:31 2583442

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%



Время: 06:19.

Время: 06:19.
© OSzone.net 2001-