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

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

Nuclears 22-09-2011 03:40 1757841

Множественная проверка в цикле (IF) с оперратором "ИЛИ"(OR)
 
Я так понял что в cmd оператор IF довольно унылый....
http://forum.oszone.net/thread-204350.html

мне как то организовать следущее нужно:
Код:

IF EXIST %SYSTEMDRIVE%\VOLSA or %SYSTEMDRIVE%\VOLSD or ... or %SYSTEMDRIVE%\VOLSV (
ECHO 1
)
IF EXIST %SYSTEMDRIVE%\VOLMB or %SYSTEMDRIVE%\VOLME or ... or %SYSTEMDRIVE%\VOLMW (
ECHO 2
)
IF EXIST %SYSTEMDRIVE%\VOLDC or %SYSTEMDRIVE%\VOLDF or ... or %SYSTEMDRIVE%\VOLDX (
ECHO 3
)

вообщем в каждой группе (VOLxy) сделать проверочку y
если делать проверку каждого случая, слишком громоздкий код получается :(

что-то совсем сам запутался :( :gulp: :durak:
нужно было так: :)
Код:

IF EXIST %SYSTEMDRIVE%\VOLMA or %SYSTEMDRIVE%\VOLSA or %SYSTEMDRIVE%\VOLDA or ... or %SYSTEMDRIVE%\VOLMV or %SYSTEMDRIVE%\VOLSV or %SYSTEMDRIVE%\VOLDV (
rem вообщем буковки A, D, G,...,V
ECHO 1
)
IF EXIST %SYSTEMDRIVE%\VOLMB or %SYSTEMDRIVE%\VOLSB or %SYSTEMDRIVE%\VOLDB or ... or %SYSTEMDRIVE%\VOLMW or %SYSTEMDRIVE%\VOLSW or %SYSTEMDRIVE%\VOLDW (
rem вообщем буковки B, E, H,...,W
ECHO 2
)
IF EXIST %SYSTEMDRIVE%\VOLMC or %SYSTEMDRIVE%\VOLSC or %SYSTEMDRIVE%\VOLDC or ... or %SYSTEMDRIVE%\VOLMX or %SYSTEMDRIVE%\VOLSX or %SYSTEMDRIVE%\VOLDX (
rem вообщем буковки C, F, I,...,X

ECHO 3
)

уж простите :bow: , каюсь!

PS: счас опробываю варианты :)

Iska 22-09-2011 05:35 1757845

Nuclears, можно так:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

for %%i in (a d v) do if exist "%SystemDrive%\vols%%i" echo 1 & goto :Break1

:Break1
for %%i in (b e w) do if exist "%SystemDrive%\volm%%i" echo 2 & goto :Break2

:Break2
for %%i in (c f x) do if exist "%SystemDrive%\vold%%i" echo 3 & goto :Break3

:Break3

endlocal
exit /b 0


SendMessage 22-09-2011 13:54 1758114

А еще так:
Код:

@echo off

set "IfExist=dir "%SystemDrive%\vol*" /b/a | findstr /i"
set "Return=>nul && echo"

%IfExist% "vols[adv]$" %Return% 1
%IfExist% "volm[bew]$" %Return% 2
%IfExist% "vold[cfx]$" %Return% 3

Баловство для красивости кода :)

SendMessage 22-09-2011 15:56 1758188

С учетом новых данных:
Код:

set "IfExist=dir "%SystemDrive%\vol*" /b/a | findstr /i"
set "Return=>nul && echo"

%IfExist% "vol[dms][adgv]$" %Return% 1
%IfExist% "vol[dms][behw]$" %Return% 2
%IfExist% "vol[dms][cfix]$" %Return% 3

Буковки нужные добавьте.

Iska 22-09-2011 16:52 1758237

Цитата:

Цитата SendMessage
С учетом новых данных:
Код:

%IfExist% "vol[dms][adgv]$" …
»

Получается, что изначально техзадание неверно поставлено было?

Nuclears 23-09-2011 14:53 1758781

Iska, да, мало спал, плохо думал вот и накосячил :durak:

SendMessage, ваше решение допилил :)
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set "IfExist=dir "%SystemDrive%\Install\VOL*" /b/a | findstr /i"
set "VOLXY=>nul && CALL"

%IfExist% "VOL[MSD][AGO]$" %VOLXY% :VOLxAGO
%IfExist% "VOL[MSD][BHP]$" %VOLXY% :VOLxBHP
%IfExist% "VOL[MSD][CIQ]$" %VOLXY% :VOLxCIQ

:VOLxAGO
ECHO ":VOLxAGO"
rem do something
CALL :INSTALL

:VOLxBHP
ECHO ":VOLxBHP"
rem do something
CALL :INSTALL

:VOLxCIQ
ECHO ":VOLxCIQ"
rem do something

CALL :INSTALL

:INSTALL
ECHO OK
pause
exit


Devils0411 29-12-2011 11:33 1824739

Ребятки, подскажите, как сделать множественное сравнение, например: (напишу просто текстом, а не кодом)
если переменная var1=2, а переменная var2=4 тогда вывести сообщение var1=2, var2=4
З.Ы, уже нашел на форуме, что простым способом через If не получиться. только последовательным сравнением.

Devils0411 29-12-2011 13:13 1824822

Возник вопрос, как производная от вышеописанного мною.
Помогите сократить размер кода:
Код:

@echo off
set var=1
set var2=2

:Again
if %var2% EQU 1 (
if %var% EQU 1 (
goto choice1) else (
if %var% EQU 2 (
goto choice2)
)
) Else (
if %var2% EQU 2 (
if %var1% EQU 1 (
goto choice1) else (
if %var1% EQU 2 (
goto choice3)
)
) Else (
goto Again)
)



Время: 18:41.

Время: 18:41.
© OSzone.net 2001-