Показать полную графическую версию : [решено] Проверка наличия параметров
Есть командный файл. Если файл запускается с параметром debug - то нужно выполнить дополнительную операцию, если параметра нет - операция пропускается
IF %1 NEQ debug echo Debug
если запускаю файл с параметром то все работает, но если запускаю без параметра то %1 оказывается пустой строкой и скрипт вылетает с ошибкой "Непредвиденной появление debug"
Подскажите как написать правильно? Спасибо
IF "%1"=="debug" echo Debug
@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)но кавычки в любом случае должны присутствовать.
немного лаконичней »
в топку лаконичность.
небольшие изменения входа и все летит в ...
@echo off
call :# debug 1
::call :# "debug 1"
pause
:#
if [%~1]==[debug 1] (echo Debug 1)
exit /b
делать надо сразу правильно, так как написал gora, единственно тильду можно поставить:
if "%~1"=="debug" echo Debug
Как-то можно обозначить вместо конкретного аргумента "любой"?
Т.е. был передан параметр - команда, без параметров - команда 2.
"*" как любое количество символов в сравнении не работает. (вобще плохо понимаю когда она работает).
Проверил neq - работает вроде.
Гуглится эта тема, потому напишу для таких же "одарённых" как я:
if "%~1" neq "" (echo %~1
) else (
echo no arguments
)
Ну а дальше, видимо, через перебор параметров (else) прыжки к командам (goto).
Так виднее
@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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.