PDA

Показать полную графическую версию : [решено] Проверка наличия параметров


GhostKU
30-09-2011, 11:35
Есть командный файл. Если файл запускается с параметром debug - то нужно выполнить дополнительную операцию, если параметра нет - операция пропускается

IF %1 NEQ debug echo Debug

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

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

gora
30-09-2011, 11:37
IF "%1"=="debug" echo Debug

Mad Max
05-02-2015, 10:35
@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
Могу предложить другой вариант (немного лаконичней чем у 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
немного лаконичней »
в топку лаконичность.
небольшие изменения входа и все летит в ...

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

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

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


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

alpap
29-07-2017, 23:53
Так виднее

@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




© OSzone.net 2001-2012