Показать полную графическую версию : [решено] Как сделать сложное условие в операторе if
madmax24
14-04-2009, 12:04
Добрый день.
Извиняюсь если пропустил поиском тему, но я в bat файле хочу, чтобы у меня в нужный месяц и нужный день делалась нужная команда А.
Как выцепить день и месяц я знаю. А вот как в if затолкать 2 этих условия я не могу найти :(.
пробовал типа if УСЛОВИЕ 1 && УСЛОВИЕ 2 (
командна А
)
не помогло... со скобками в условии пробовал, тоже не помогло...
Подсобите умным советом, пожалуйста.
CyberDaemon
14-04-2009, 13:01
Вложить IF друг в друга?
IF УСЛОВИЕ 1 (
IF УСЛОВИЕ2 КОМАНДА A
)
madmax24
14-04-2009, 16:28
пишет что ошибка в ситаксисе.... ну там синтаксис то примитивный ))).... Структура моего скрипта такая должна быть:
if xxx==zzz (
if aaa==www тра ля ля
) ELSE (
if xxx==www && ddd==sss (
dddddd
exit
)
)
Petya V4sechkin
14-04-2009, 16:42
if xxx==zzz (
if aaa==www тра ля ля
) ELSE (
if xxx==www (
if ddd==sss (
dddddd
exit
)
)
)
madmax24
16-04-2009, 10:03
Буду пробовать, жаль конечно что в один оператор не получится :(
жаль конечно что в один оператор не получится »
If xxx==zzz (
If aaa==www тра ля ля
) Else (
If xxx==www If ddd==sss (
dddddd
exit
)
)
madmax24
16-04-2009, 15:07
amel27, это не то, что я хочу :)
п.с. А кто поставил тему решенной? и почему?
это не то, что я хочу »
Так а что же Вы хотите!? :dont-know Изобрести свой синтаксис: && ddd==sss, так cmd его все равно не поймет, т.к., перед ddd==sss обязательно должен идти оператор If. Вам на это cmd указывает:пишет что ошибка в ситаксисе.... »
А кто поставил тему решенной? и почему? »
1 Наверное модератор...
2 Потому что Вам предложили несколько вариантов правильного написания вложенных условий и ответ на ваш вопроскак в if затолкать 2 этих условия»
Вам выдан!
madmax24
16-04-2009, 16:26
Так а что же Вы хотите!? Изобрести свой синтаксис: && ddd==sss, »
Не, конечно синтаксис не буду изобретать, чесно верил в то, что виндовс могуч :lol:
я бы и сам поставил решеной тему, когда разобрался во всем до конца и все понял :)
SharkyEXE
12-02-2015, 11:10
2 all
Есть некрасивый, не компактный, но зато 100%но рабочий Вариант 1
Вариант 1
If Not Exist "%Path1%" (
GoTo NotFound
)
If Not Exist "%Path2%" (
GoTo NotFound
)
If Not Exist "%Path3%" (
GoTo NotFound
)
If Not Exist "%Path4%" (
GoTo NotFound
)
If Not Exist "%Path5%" (
GoTo NotFound
)
Пожалуйста, у кого есть время, возможность, желание - помогите мне Вариант 1 объединить в одну строку, чтобы было красиво, компактно, что-то вроде Вариант 2
Вариант 2
( ( ( If Not Exist "%Path1%" ) Or ( If Not Exist "%Path2%" ) Or ( If Not Exist "%Path3%" ) Or ( If Not Exist "%Path4%" ) Or ( If Not Exist "%Path5%" ) ) (
GoTo NotFound
)
)
Ещё я думал про Вариант 3
If Not Exist "%Path1%" (
If Not Exist "%Path2%" (
If Not Exist "%Path3%" (
If Not Exist "%Path3%" (
If Not Exist "%Path5%" (
GoTo NotFound
)
)
)
)
)
Но - Вариант 3 сработает только в том случае, если нет всех 5ти файлов.
Если, для примера:
1) нет файл 1 и 2
2) есть файл 3
3) нет файл 4 и 5
то Вариант 3 не сработает.
Спасибо.
Есть некрасивый, не компактный, но зато 100%но рабочий Вариант 1 »
Этого мало. Покажите реальный код. Или опишите словами, что Вам нужно.
что-то вроде Вариант 2 »
Вариант 1 совершенно не соответствует псевдокоду из Варианта 2.
Перевожу Ваши варианты на русский.
Вариант 1: последовательно проверяем существование путей «%Path1%»-«%Path5%». Как только очередной из путей не будет найден — прерываем обработку.
Вариант 2: если не будет найден хотя бы один из путей «%Path1%»-«%Path5%» — завершаем обработку.
SharkyEXE
12-02-2015, 13:21
Покажите реальный код. »
Вот
1.cmd
Set Papka=C:\Program Files\AkelPadmax_port
Set ProcessName=AkelPad.exe
Set Path1=%WinDir%\System32\Attrib.exe
Set Path2=%WinDir%\System32\TaskList.exe
Set Path3=%WinDir%\System32\Find.exe
Set Path4=%WinDir%\System32\Taskkill.exe
Set Path5=%WinDir%\System32\Ping.exe
Cls
@Echo Off
If Not Exist "%Path1%" (
GoTo NotFound
)
If Not Exist "%Path2%" (
GoTo NotFound
)
If Not Exist "%Path3%" (
GoTo NotFound
)
If Not Exist "%Path4%" (
GoTo NotFound
)
If Not Exist "%Path5%" (
GoTo NotFound
)
Cd /D "%Papka%"
Start /Wait "" %ProcessName%
Exit
:NotFound
Echo Ne najden fajl:
@Echo.
If Not Exist "%Path1%" (
Echo "%Path1%"
@Echo.
)
If Not Exist "%Path2%" (
Echo "%Path1%"
@Echo.
)
If Not Exist "%Path3%" (
Echo "%Path1%"
@Echo.
)
If Not Exist "%Path4%" (
Echo "%Path1%"
@Echo.
)
If Not Exist "%Path5%" (
Echo "%Path1%"
@Echo.
)
Echo Zavershenie raboty fajla "%~0".
@Echo.
Echo Nazhmite lyubuyu knopku na klaviature.
@Echo.
Pause > Nul
Exit
SharkyEXE, давайте лучше словами. Не смог понять логику двойной проверки.
SharkyEXE
12-02-2015, 13:43
Не смог понять логику двойной проверки. »
Смысл в том, что до запуска AkelPad.exe происходит проверка наличия нужных файлов
Если какого-то файла нету, выводится строка, что такой-то файл не найден
Блок
:NotFoundможно упростить до вида:NotFound
Echo Ne najden fajl:
@Echo.
Echo "%Path1%"
@Echo.
Echo "%Path2%"
@Echo.
Echo "%Path3%"
@Echo.
Echo "%Path4%"
@Echo.
Echo "%Path5%"
@Echo.
Echo Zavershenie raboty fajla "%~0".
@Echo.
Echo Nazhmite lyubuyu knopku na klaviature.
@Echo.
Pause > Nul
ExitТогда как понять, какого файла не хватает до запуска AkelPad.exe?
Вот поэтому и получается двойная проверка, точнее первая проверка до запуска AkelPad.exe, вторая проверка - вывод текстом только тех файлов, которых реально нету в системе
Смысл файла:
1) запускаем файл
2) если все 5ть файлов находятся в системе, происходит запуск с ожиданием завершения файла C:\Program Files\AkelPadmax_port\AkelPad.exe
3) запускается файл C:\Program Files\AkelPadmax_port\AkelPad.exe
4) после закрытия файла C:\Program Files\AkelPadmax_port\AkelPad.exe, окно cmd закрывается
ЕСЛИ
1) запускаем файл
2) если хотя бы одного из 5ти файлов нету в системе, то:
2-1) не происходит запуск с ожиданием завершения файла C:\Program Files\AkelPadmax_port\AkelPad.exe
2-2) нет смысла запускать с ожиданием завершения файл C:\Program Files\AkelPadmax_port\AkelPad.exe, когда хотя бы одного из 5ти файлов нету в системе
3) не запускается файл C:\Program Files\AkelPadmax_port\AkelPad.exe
3-1) переход в метку NotFound
4) в окне cmd пишется, каких именно файлов не хватает
Может быть можно как-то поумнее/рациональнее это реализовать, но я голову сломал, пока только так.
Я бы сделал сие так:
@echo off
setlocal enableextensions enabledelayedexpansion
set sPath=%ProgramFiles%\AkelPadmax_port
set sFile=AkelPad.exe
set bFound=True
for %%i in ("Attrib.exe" "TaskList.exe" "Find.exe" "Taskkill.exe" "Ping.exe") do (
if not exist "%SystemRoot%\System32\%%~i" (
echo Can't find file [%SystemRoot%\System32\%%~i].
set bFound=
)
)
if defined bFound (
2>nul pushd "%sPath%" && (
start "" /wait "%sFile%"
popd
) ||(
echo Can't find folder [%sPath%].
exit /b 2
)
) else (
exit /b 1
)
endlocal
exit /b 0
SharkyEXE
12-02-2015, 14:05
Iska
Большое Вам спасибо за красивый/компактный/оптимизированный/рабочий код.
SharkyEXE
12-02-2015, 14:26
Iska
А как мне после строки
echo Can't find file [%SystemRoot%\System32\%%~i].добавить строки
@Echo.
Echo Zavershenie raboty fajla "%~0".
@Echo.
Echo Nazhmite lyubuyu knopku na klaviature.
@Echo.
Pause > Nul
ExitПри этом чтобы было типа такого:
Can't find file [C:\Windows\System32\Find.exe].
Can't find file [C:\Windows\System32\Attrib.exe].
<пустая строка>
Zavershenie raboty fajla "C:\1.cmd".
<пустая строка>
Nazhmite lyubuyu knopku na klaviature.
<пустая строка>
Пауза
Выход
Добавьте:
echo.
pause
перед «exit /b 1». Остальное лишнее.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.