Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как сделать сложное условие в операторе if

Ответить
Настройки темы
CMD/BAT - [решено] Как сделать сложное условие в операторе if

Аватара для madmax24

Ветеран


Сообщения: 1190
Благодарности: 114

Профиль | Отправить PM | Цитировать


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

-------
Я закончил, все свободны.


Отправлено: 12:04, 14-04-2009

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата SharkyEXE:
Есть некрасивый, не компактный, но зато 100%но рабочий Вариант 1 »
Этого мало. Покажите реальный код. Или опишите словами, что Вам нужно.

Цитата SharkyEXE:
что-то вроде Вариант 2 »
Вариант 1 совершенно не соответствует псевдокоду из Варианта 2.

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

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

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

Отправлено: 13:12, 12-02-2015 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 900
Благодарности: 86

Профиль | Отправить PM | Цитировать


Цитата 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

Отправлено: 13:21, 12-02-2015 | #12


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

Отправлено: 13:39, 12-02-2015 | #13


Ветеран


Сообщения: 900
Благодарности: 86

Профиль | Отправить PM | Цитировать


Цитата 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 пишется, каких именно файлов не хватает

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

Последний раз редактировалось SharkyEXE, 12-02-2015 в 13:54.


Отправлено: 13:43, 12-02-2015 | #14


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Я бы сделал сие так:
Скрытый текст
Код: Выделить весь код
@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
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:53, 12-02-2015 | #15


Ветеран


Сообщения: 900
Благодарности: 86

Профиль | Отправить PM | Цитировать


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

Последний раз редактировалось SharkyEXE, 12-02-2015 в 14:13.


Отправлено: 14:05, 12-02-2015 | #16


Ветеран


Сообщения: 900
Благодарности: 86

Профиль | Отправить PM | Цитировать


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

Отправлено: 14:26, 12-02-2015 | #17


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Добавьте:
Код: Выделить весь код
echo.
pause
перед «exit /b 1». Остальное лишнее.
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:43, 12-02-2015 | #18



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как сделать сложное условие в операторе if

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Установка - [решено] Как сделать из настольной Windows 7 сделать ноутбучную версию? Andrei_IW Microsoft Windows 7 9 16-08-2009 15:53
CMD/BAT - [решено] Не всегда отрабатывается условие при использовании rasdial hosco Скриптовые языки администрирования Windows 8 04-05-2009 10:16
CMD/BAT - [решено] Не выполняет одно условие удаления файла VoodooHaker Скриптовые языки администрирования Windows 7 14-02-2009 17:49
VBS/WSH/JS - [решено] Как добавить "сложное" значение в "бинарный" параметр реестра с помощью WSH 13Demon Скриптовые языки администрирования Windows 1 10-02-2009 09:47
[решено] IF EXIST <условие> goto Pozia AutoIt 1 18-01-2009 19:20




 
Переход