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

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

madmax24 14-04-2009 12:04 1093632

Как сделать сложное условие в операторе if
 
Добрый день.
Извиняюсь если пропустил поиском тему, но я в bat файле хочу, чтобы у меня в нужный месяц и нужный день делалась нужная команда А.
Как выцепить день и месяц я знаю. А вот как в if затолкать 2 этих условия я не могу найти :(.
пробовал типа if УСЛОВИЕ 1 && УСЛОВИЕ 2 (
командна А
)
не помогло... со скобками в условии пробовал, тоже не помогло...
Подсобите умным советом, пожалуйста.

CyberDaemon 14-04-2009 13:01 1093680

Вложить IF друг в друга?

IF УСЛОВИЕ 1 (
IF УСЛОВИЕ2 КОМАНДА A
)

madmax24 14-04-2009 16:28 1093842

пишет что ошибка в ситаксисе.... ну там синтаксис то примитивный ))).... Структура моего скрипта такая должна быть:
if xxx==zzz (
if aaa==www тра ля ля
) ELSE (
if xxx==www && ddd==sss (
dddddd
exit
)
)

Petya V4sechkin 14-04-2009 16:42 1093854

Код:

if xxx==zzz (
  if aaa==www тра ля ля
) ELSE (
  if xxx==www (
    if ddd==sss (
      dddddd
      exit
    )
  )
)


madmax24 16-04-2009 10:03 1095497

Буду пробовать, жаль конечно что в один оператор не получится :(

amel27 16-04-2009 12:06 1095626

Цитата:

Цитата madmax24
жаль конечно что в один оператор не получится »

Код:

If xxx==zzz (
  If aaa==www тра ля ля
) Else (
  If xxx==www If ddd==sss (
      dddddd
      exit
  )
)


madmax24 16-04-2009 15:07 1095814

amel27, это не то, что я хочу :)


п.с. А кто поставил тему решенной? и почему?

gora 16-04-2009 15:40 1095850

Цитата:

Цитата madmax24
это не то, что я хочу »

Так а что же Вы хотите!? :dont-know Изобрести свой синтаксис: && ddd==sss, так cmd его все равно не поймет, т.к., перед ddd==sss обязательно должен идти оператор If. Вам на это cmd указывает:
Цитата:

Цитата madmax24
пишет что ошибка в ситаксисе.... »

Цитата:

Цитата madmax24
А кто поставил тему решенной? и почему? »

1 Наверное модератор...
2 Потому что Вам предложили несколько вариантов правильного написания вложенных условий и ответ на ваш вопрос
Цитата:

Цитата madmax24
как в if затолкать 2 этих условия»

Вам выдан!

madmax24 16-04-2009 16:26 1095913

Цитата:

Цитата gora
Так а что же Вы хотите!? Изобрести свой синтаксис: && ddd==sss, »

Не, конечно синтаксис не буду изобретать, чесно верил в то, что виндовс могуч :lol:
я бы и сам поставил решеной тему, когда разобрался во всем до конца и все понял :)

SharkyEXE 12-02-2015 11:10 2470263

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 не сработает.
Спасибо.

Iska 12-02-2015 13:12 2470315

Цитата:

Цитата SharkyEXE
Есть некрасивый, не компактный, но зато 100%но рабочий Вариант 1 »

Этого мало. Покажите реальный код. Или опишите словами, что Вам нужно.

Цитата:

Цитата SharkyEXE
что-то вроде Вариант 2 »

Вариант 1 совершенно не соответствует псевдокоду из Варианта 2.

Перевожу Ваши варианты на русский.

Вариант 1: последовательно проверяем существование путей «%Path1%»-«%Path5%». Как только очередной из путей не будет найден — прерываем обработку.

Вариант 2: если не будет найден хотя бы один из путей «%Path1%»-«%Path5%» — завершаем обработку.

SharkyEXE 12-02-2015 13:21 2470320

Цитата:

Цитата Iska
Покажите реальный код. »

Вот

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


Iska 12-02-2015 13:39 2470333

SharkyEXE, давайте лучше словами. Не смог понять логику двойной проверки.

SharkyEXE 12-02-2015 13:43 2470334

Цитата:

Цитата Iska
Не смог понять логику двойной проверки. »

Смысл в том, что до запуска 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 пишется, каких именно файлов не хватает

Может быть можно как-то поумнее/рациональнее это реализовать, но я голову сломал, пока только так.

Iska 12-02-2015 13:53 2470346

Я бы сделал сие так:
Скрытый текст
Код:

@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 2470350

Iska
Большое Вам спасибо за красивый/компактный/оптимизированный/рабочий код.

SharkyEXE 12-02-2015 14:26 2470361

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.
<пустая строка>
Пауза
Выход


Iska 12-02-2015 15:43 2470396

Добавьте:
Код:

echo.
pause

перед «exit /b 1». Остальное лишнее.


Время: 18:56.

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