Показать полную графическую версию : [решено] If внутри If
Доктор Ливси
01-02-2012, 14:05
Помогите, пожалуйста. Нужно следующее: при отсутствии в месяце и дне файла нулей и единиц присвоить переменной md две цифры текущего месяца и две цифры текущего дня
Echo Off && Cls
Setlocal EnableExtensions EnableDelayedExpansion
Echo Сегодня %date%
Echo %date:~3,2% | findstr "01 02 03 04 05 06 07 08 09" > nul
If !ErrorLevel!==1 (Echo %date:~0,2% | findstr "01 02 03 04 05 06 07 08 09" > nul
If !ErorLevel!==1 (Set md=%mdd:~3,2%%mdd:~0,2%)
)
Echo %md%
Endlocal
Ругается, что вывод команд на экран (Echo) отключен. Пытался конструкции, типа %date:~3,2% присваивать переменным и затем производить действия с переменными - та же петрушка
могли бы уже освоить тег code
Доктор Ливси
01-02-2012, 15:28
ошибся, только при отсутствии нулей
kiripanda
01-02-2012, 18:34
при отсутствии нулей »10, 20, 30 тоже неправильные?
Может, при отсутствии ведущих нулей? Кстати, их может и не быть – зависит от настроек даты
А что такое ErorLevel и mdd ? Повнимательнее нельзя?
Echo Off && Cls
Setlocal EnableExtensions EnableDelayedExpansion
Echo Сегодня %date%
Echo %date:~3,2% | findstr "01 02 03 04 05 06 07 08 09" > nul
If !ErrorLevel!==1 (Echo %date:~0,2% | findstr "01 02 03 04 05 06 07 08 09" > nul
If !ErrorLevel!==1 (Set md=%date:~3,2%%date:~0,2%)
)
Echo.%md%
Endlocal
Доктор Ливси
02-02-2012, 06:53
Да, при отсутствии ведущих нулей
Каюсь, невнимателен. Но результат получился тот же. Отрабатывает
Echo Сегодня %date% »
А дальше "Режим вывода команд на экран (Echo) отключен".
Доктор Ливси
02-02-2012, 14:01
Попробую Изложить. Допустим, сегодня десятое октоября (т. е. в формате месяц-день будет 1010)
Строкой
Echo %date:~3,2% | findstr "01 02 03 04 05 06 07 08 09" > nul »
я узнаю, что месяц, начинается не с нуля (10 - октябрь), а следующей стркой
If !ErrorLevel!==1 (Echo %date:~0,2% | findstr "01 02 03 04 05 06 07 08 09" > nul »
что он мне нужен, поэтому смотрю дату что и дата подходит (10 - десятое число)
Поэтому с помощью If !ErrorLevel!==1 (Set md=%date:~3,2%%date:~0,2%) » хочу записать это в переменную md которая, если я все написал верно, будет равна 1010.
Echo %md% » должно показать 1010.
Уф-ф, надеюсь, что всё понятно :)
El Sanchez
02-02-2012, 15:28
Доктор Ливси, проверите в октябре:
@Echo Off
SetLocal
If %DATE:~3,2% GEQ 10 If %DATE:~0,2% GEQ 10 Set md=%DATE:~3,2%%DATE:~0,2%&&Call Echo:%md%
kiripanda
02-02-2012, 17:32
результат получился тот же.
...
"Режим вывода команд на экран (Echo) отключен".»
какой у вас формат даты?
Сегодня 11.22.2012
2211
megaloman
02-02-2012, 17:41
Я вместо переменной Date использую Dt - легче отлаживать. Вот моё решение. Опять же, вы не указали какое должно быть md если условия не выполняются. Я забил это значение как xxxx. Опять же, если формат даты другой, например, DD.MM.YYYY, то 0,2 и 3,2 везде взаимно замените.
@Echo off
rem Формат даты MM.DD.YYYY
rem Set Dt=%Date%
Set Dt=11.22.2012
Set /A MM=1%Dt:~0,2%-100
Set /A DD=1%Dt:~3,2%-100
Set md=xxxx
If %MM%==%Dt:~0,2% If %DD%==%Dt:~3,2% Set md=%MM%%DD%
Echo %md%
Извините за вторжение... я почти в теме.
ПОМОГИТЕ)
@echo off
:EOM
SetLocal
Rem _Number=Parameters
Set _1=123456789
Set /P "i= ‚ўҐ¤ЁвҐ *®¬Ґа Є®¬ЇмовҐа*: "
If Defined _%i% Call Start /b "%i%" ""ift.exe -b Lont"" "%%_%i%%%" > nul
Endlocal
goto EOM
:test
test.vbs > nul
как сделать, что бы можно было вызывать командой test, этот скрипт test.vbs
Пробовал так
@echo off
:EOM
SetLocal
Rem _Number=Parameters
Set _1=123456789
Set /P "i= ‚ўҐ¤ЁвҐ *®¬Ґа Є®¬ЇмовҐа*: "
If Defined _%i% Call Start /b "%i%" ""ift.exe -b Lont"" "%%_%i%%%" > nul
if /i %i%==test goto test
Endlocal
goto EOM
:test
test.vbs > nul
Да вот только есть проблема... Если нажать Enter то пишет что не предвиденное появление goto и консоль закрывается.
А надо что бы она не закрывалась а возвращалась на метку goto :EOM если ничего не ввели или ввели не правильно.
попробовал ещё так
@echo off
:eom
SetLocal
Rem _Number=Parameters
Set _19=00196652E984
Set /P "i= Parameters: "
if /i %i%==test goto test
If Defined _%i% Call Start /b "%i%" ""ift.exe -b Lont"" "%%_%i%%%" > nul
Endlocal
goto eom
:test
test.vbs > nul
Endlocal
goto eom
вроде работает как надо, только теперь надо сделать, что бы консоль сама не закрывалась, если нажму enter
Ну если что то не правильно то поправите.
С меня "благодарность")
megaloman
02-02-2012, 18:33
root221, Если делать как у Вас @Echo Off
:eom
Set /P i="i= Parameters: "
If /i "%i%"=="test" GoTo :test
GoTo :eom
:test
test.vbs
GoTo :eom
А если чуть соптимизировать @Echo Off
:eom
Set /P i="i= Parameters: "
If /i "%i%"=="test" Call test.vbs & GoTo :eom
GoTo :eom
Доктор Ливси
03-02-2012, 06:50
Спасибо всем участвовавшим, у ми всё работает как надо теперь
Подскажите, почему не выполняется проверка по второму условию?
if exist "%ProgramFiles%\WinRAR\WinRAR.exe" (
if not exist "%Windir%\Web\Wallpaper_bk" (
start "Rar" /wait "%ProgramFiles%\WinRAR\WinRAR.exe" a -ep1 "%Windir%\Web\Wallpaper_bk" "%Windir%\Web\Wallpaper\*.*"
)
)
Foreigner
14-05-2012, 21:33
sov44, А винрар точно в %ProgramFiles% ? А то еще бывает %ProgramFiles(x86)%.
Foreigner, ось Windows XP х 32, %ProgramFiles(x86)% не работает. Скрипт срабатывает как при наличии, так и при отсутствии файла Wallpaper_bk :(
Foreigner
14-05-2012, 22:28
У меня схожее условие отрабатывает правильно.
У меня схожее условие отрабатывает правильно. »
а у меня архив всё время пересобирается (((
Скрипт упаковки работает. В папке Wallpaper находится подпапка. Мне не нужно её архивировать, только файлы, поэтому убран крюч -r »
неправильно понял вопрос
проверил скрипт, срабатывает как надо, архив собирается только если нет файла Wallpaper_bk
Разобрался. Забыл в Wallpaper_bk указать расширение rar.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.