Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Проверка наличия параметров

Ответить
Настройки темы
CMD/BAT - [решено] Проверка наличия параметров

Пользователь


Сообщения: 60
Благодарности: 1


Конфигурация

Профиль | Отправить PM | Цитировать


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

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

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

Отправлено: 11:35, 30-09-2011

 

Аватара для gora

Ушёл из жизни


Сообщения: 6021
Благодарности: 3491

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
IF "%1"=="debug" echo Debug
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:37, 30-09-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Mad Max

Пользователь


Сообщения: 64
Благодарности: 3

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

set sParam1=%~1

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

endlocal
exit /b 0

Отправлено: 10:35, 05-02-2015 | #3


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

-------
Для того, чтобы нарушить правило, прежде следует научиться его уважать.


Последний раз редактировалось Schrodingers Kater, 23-07-2017 в 17:18. Причина: добавлено пояснение с отсылкой на собственную ошибку


Отправлено: 03:38, 12-01-2017 | #4


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Цитата 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
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:49, 12-01-2017 | #5


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Проверил neq - работает вроде.
Гуглится эта тема, потому напишу для таких же "одарённых" как я:
Код: Выделить весь код
if "%~1" neq "" (echo %~1
) else (
echo no arguments
)
Ну а дальше, видимо, через перебор параметров (else) прыжки к командам (goto).

Отправлено: 20:15, 29-07-2017 | #6


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Так виднее
Код: Выделить весь код
@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

Отправлено: 23:53, 29-07-2017 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Проверка наличия параметров

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] Проверка наличия обновления SANIOK_AV Скриптовые языки администрирования Windows 4 18-08-2011 14:47
Любой язык - [решено] Проверка наличия файла на веб-сервере Vadikan Скриптовые языки администрирования Windows 5 20-05-2011 01:22
VBS/WSH/JS - [решено] Проверка наличия соединения с интернетом (*.vbs) BadAngel Скриптовые языки администрирования Windows 9 18-04-2011 12:06
CMD/BAT - Проверка наличия диска в дисководе по папке MedVetoff Скриптовые языки администрирования Windows 8 27-08-2009 16:55
[решено] Проверка наличия поля в таблице БД Artem-Samsung Вебмастеру 8 19-03-2008 21:40




 
Переход