![Компьютерный форум OSzone.net](images/oszone.net.print.gif) |
|
Множественная проверка в цикле (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: счас опробываю варианты :)
|
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
Буковки нужные добавьте.
|
Цитата:
Цитата SendMessage
С учетом новых данных:
Код:
%IfExist% "vol[dms][adgv]$" …
»
|
Получается, что изначально техзадание неверно поставлено было?
|
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.
© OSzone.net 2001-