Подскажите, как заставить работать эту прелесть.
От: Alexey Girin Россия  
Дата: 30.04.03 11:05
Оценка:
Есть cmd скрипт, система — win2k
Вопрос — Если запускать с 2-мя параметрами — все пашет, но если запустить с одним или вообще без параметров, то не работает.
Почему?
Может есть другой способ добится того же самого?
Или все дело в количестве вложенных IF ?

@echo off
set C_DIR=%1
set OVER_FLAG=%2
if not defined C_DIR (
echo First parameter NOT defined.
goto end
) else (
if exist %C_DIR%\ntdetect.com (
if defined OVER_FLAG (
if %OVER_FLAG%==RE-INSTALL (
echo Second parameter: %2
echo Reinstall started.
goto end
)
if %OVER_FLAG%==INSTALL (
echo Second parameter: %2
echo Install started.
) else (
echo Unknown parameter: %2
)
goto end
) else (
echo Second parameter NOT defined.
)
) else (
echo Invalid boot directory defined.
echo %1\ntdetect.com not found!
goto end
)
echo All OK.
)
:end


30.04.03 15:28: Перенесено модератором из 'Исходники' — F
Re: Подскажите, как заставить работать эту прелесть.
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 30.04.03 11:08
Оценка:
Здравствуйте, Alexey Girin, Вы писали:

[]

Объясните плз, что это за прелесть и что она делает, сообществу... Иначе эта прелесть имеет все шансы оказаться в форуме "Прочее" -F
Re[2]: Подскажите, как заставить работать эту прелесть.
От: Alexey Girin Россия  
Дата: 30.04.03 11:16
Оценка:
Задача стоит такая — написать скрипт, который будет брать на вход не более 2-х параметров
Первый параметр — директория где лежит ntdetect.com
второй — некий флаг могущий принимать значение INSTALL или RE-INSTALL, на все другие значения нужно ругаться.
Требовалось, что бы второй параметр был не обязательным и анализировался только в том случае если первый параметр — был правилен.
Re[3]: Подскажите, как заставить работать эту прелесть.
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 30.04.03 11:28
Оценка:
Здравствуйте, Alexey Girin, Вы писали:

AG>Задача стоит такая — написать скрипт, который будет брать на вход не более 2-х параметров


Тогда переношу в форум "Прочее". В форум "Исходники", плз, только готовый, реюзабельный код... -F
Re[4]: Подскажите, как заставить работать эту прелесть.
От: Alexey Girin Россия  
Дата: 30.04.03 11:50
Оценка:
Здравствуйте, Flamer, Вы писали:

F>Тогда переношу в форум "Прочее". В форум "Исходники", плз, только готовый, реюзабельный код... -F


А код кстати, вполне реюзабельный... зря вы так...
Re: Подскажите, как заставить работать эту прелесть.
От: Кодт Россия  
Дата: 30.04.03 12:48
Оценка: 3 (1)
Здравствуйте, Alexey Girin, Вы писали:

AG>Есть cmd скрипт, система — win2k

AG>Вопрос — Если запускать с 2-мя параметрами — все пашет, но если запустить с одним или вообще без параметров, то не работает.
AG>Почему?
AG>Может есть другой способ добится того же самого?
AG>Или все дело в количестве вложенных IF ?

Проблема в том, что вся конструкция
if _condition_ (
  then-commands
) else (
  else-commands
)

обрабатывается как единая подстановка.

Поэтому в ней появляются синтаксические ошибки вида
:: до подстановки
  if %VAR%==VALUE ...
------------
:: после подстановки
   if ==VALUE ...


Выходы
1) писать что-то вроде
  if {%VAR%}=={VALUE} ...
------------
:: получится
  if {}=={VALUE} ...


2) убрать вложенные IF-ы. Они там не нужны.
Заодно привести код к DOS-compatible.
@echo off 

rem ::::: early warning :::::
if not {%2}=={} goto s1
    echo Please specify both parameters.
    goto end
:s1

set C_DIR=%1 
set OVER_FLAG=%2 

rem :::::: parsing first parameter :::::
if {%C_DIR%}=={} goto s2
    rem ::::: this was already detected.
    echo First parameter NOT defined. 
    goto end 
:s2
if exist %C_DIR%\ntdetect.com goto s3
    echo Invalid boot directory defined. 
    echo %1\ntdetect.com not found! 
    goto end 
:s3

rem :::::: parsing second parameter :::::
if {%OVER_FLAG%}=={} goto s4
    rem ::::: this was already detected
    echo Second parameter NOT defined. 
    goto end
:s4
if not %OVER_FLAG%==RE-INSTALL goto s5
    echo Second parameter: %2 
    echo Reinstall started. 
    goto end 
:s5
if not %OVER_FLAG%==INSTALL goto s6
    echo Second parameter: %2 
    echo Install started.
    goto ok
:s6
echo Unknown parameter: %2 
goto end 


:ok
rem ::::: All stuff :::::
echo All OK. 

:end
(=^.^=) Neko ... << RSDN@Home 1.0 beta 6a >>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.