Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проверка наличия параметров (http://forum.oszone.net/showthread.php?t=216831)

GhostKU 30-09-2011 11:35 1762955

Проверка наличия параметров
 
Есть командный файл. Если файл запускается с параметром debug - то нужно выполнить дополнительную операцию, если параметра нет - операция пропускается

Код:

IF %1 NEQ debug echo Debug
если запускаю файл с параметром то все работает, но если запускаю без параметра то %1 оказывается пустой строкой и скрипт вылетает с ошибкой "Непредвиденной появление debug"

Подскажите как написать правильно? Спасибо

gora 30-09-2011 11:37 1762958

Код:

IF "%1"=="debug" echo Debug

Mad Max 05-02-2015 10:35 2466631

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sParam1=%~1

if defined sParam1 (
    echo [%sParam1%]
) else (
    echo Usage: %~nx0 ^<Parameter^>
)

endlocal
exit /b 0


Schrodingers Kater 12-01-2017 03:38 2702810

Могу предложить другой вариант (немного лаконичней чем у Mad Max'a и примерно с таким же интервалом по времени :) ):
Код:

if [%~1]==[debug] (echo Debug)
UPDATE:
причиной использования квадратных скобок была ошибка в одном из тестов - интерпретатор съедал кавычки, если значение %1 не передавалось либо было пустым и далее выходила ошибка синтаксиса.
Единственным верным вариантом является ответ gora с поправкой на то, что тильда все таки должна присутствовать (так как при ее отсутствии в bat-файл параметр передается уже обрамленный кавычками):
Код:

if "%~1"=="debug" (echo Debug)
В случае, если ошибка синтаксиса все же будет возникать то можно использовать любой вариант экранирования значений:
Код:

if "[%~1]"=="[debug]" (echo Debug)
но кавычки в любом случае должны присутствовать.

alpap 12-01-2017 13:49 2702900

Цитата:

Цитата Schrodinger Kater
немного лаконичней »

в топку лаконичность.
небольшие изменения входа и все летит в ...
Код:

@echo off
call :# debug 1
::call :# "debug 1"
pause

:#
 if [%~1]==[debug 1] (echo Debug 1)
exit /b

делать надо сразу правильно, так как написал gora, единственно тильду можно поставить:
Код:

if "%~1"=="debug" echo Debug

Al3223 29-07-2017 20:15 2754802

Как-то можно обозначить вместо конкретного аргумента "любой"?
Т.е. был передан параметр - команда, без параметров - команда 2.
"*" как любое количество символов в сравнении не работает. (вобще плохо понимаю когда она работает).

Проверил neq - работает вроде.
Гуглится эта тема, потому напишу для таких же "одарённых" как я:
Код:

if "%~1" neq "" (echo %~1
) else (
echo no arguments
)

Ну а дальше, видимо, через перебор параметров (else) прыжки к командам (goto).

alpap 29-07-2017 23:53 2754823

Так виднее
Код:

@echo off
call :# "md" "rd" "del"
pause& exit

:#
 echo -----------------------
 echo %*
 if not "%*"=="" echo OK
 echo -----------------------
  for %%a in (%*) do (
  if not "%~1"=="" echo %%a
  )
 echo -----------------------
exit /b



Время: 03:35.

Время: 03:35.
© OSzone.net 2001-