Есть 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
Здравствуйте, Alexey Girin, Вы писали:
[]
Объясните плз, что это за прелесть и что она делает, сообществу... Иначе эта прелесть имеет все шансы оказаться в форуме "Прочее"
-F
Задача стоит такая — написать скрипт, который будет брать на вход не более 2-х параметров
Первый параметр — директория где лежит ntdetect.com
второй — некий флаг могущий принимать значение INSTALL или RE-INSTALL, на все другие значения нужно ругаться.
Требовалось, что бы второй параметр был не обязательным и анализировался только в том случае если первый параметр — был правилен.
Здравствуйте, Alexey Girin, Вы писали:
AG>Задача стоит такая — написать скрипт, который будет брать на вход не более 2-х параметров
Тогда переношу в форум "Прочее". В форум "Исходники", плз, только готовый, реюзабельный код... -F
Здравствуйте, Flamer, Вы писали:
F>Тогда переношу в форум "Прочее". В форум "Исходники", плз, только готовый, реюзабельный код... -F
А код кстати, вполне реюзабельный... зря вы так...
Здравствуйте, 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 >>