Войти

Показать полную графическую версию : [решено] 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% присваивать переменным и затем производить действия с переменными - та же петрушка

ferget
01-02-2012, 14:36
могли бы уже освоить тег 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%

root221
02-02-2012, 17:43
Извините за вторжение... я почти в теме.

ПОМОГИТЕ)

@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
Спасибо всем участвовавшим, у ми всё работает как надо теперь

sov44
14-05-2012, 21:06
Подскажите, почему не выполняется проверка по второму условию?

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)%.

sov44
14-05-2012, 22:08
Foreigner, ось Windows XP х 32, %ProgramFiles(x86)% не работает. Скрипт срабатывает как при наличии, так и при отсутствии файла Wallpaper_bk :(

Foreigner
14-05-2012, 22:28
У меня схожее условие отрабатывает правильно.

sov44
14-05-2012, 22:45
У меня схожее условие отрабатывает правильно. »
а у меня архив всё время пересобирается (((

ferget
14-05-2012, 22:49
Скрипт упаковки работает. В папке Wallpaper находится подпапка. Мне не нужно её архивировать, только файлы, поэтому убран крюч -r »
неправильно понял вопрос

проверил скрипт, срабатывает как надо, архив собирается только если нет файла Wallpaper_bk

sov44
14-05-2012, 23:07
Разобрался. Забыл в Wallpaper_bk указать расширение rar.




© OSzone.net 2001-2012