Войти

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


vngreez@vk
08-05-2017, 12:14
Условие такое:
Если пробелов в переменой больше или равно одному, тогда:
echo "Ошибка" & pause & exit

Iska
08-05-2017, 12:39
if "%sVar%" neq "%sVar: =%" (
echo Ошибка
pause
exit /b 1
)

mwz
08-05-2017, 13:03
vngreez@vk, вариант скелета; в примере проверяется значение переменной %ProgramFiles% на наличие минимум одного пробела:

echo %ProgramFiles%| find " " >nul
if not errorlevel 1 echo "Ошибка" & pause & exit

PS
Поправлено в соответствии с последовавшей репликой Iska

alpap
08-05-2017, 17:13
Еще вариант, показывающий заодно работу и пользу кавычек:

@echo off
call :v %Programfiles%
pause& exit

:v
if not "%~2"=="" echo Ошибка
exit /b


при запуске с параметром (1.bat %Programfiles%) достаточно

if not "%~2"=="" echo Ошибка& pause

mwz
08-05-2017, 17:40
показывающий заодно работу и пользу кавычек »

Скорее — пользу отсутствия кавычек там, где они обычно быть должны: именно это и позволяет вашей конструкции обнаружить пробел. :)

Iska
08-05-2017, 18:10
mwz, позволяет обнаруживать даже там, где его нет. alpap, для решения поставленной задачи Ваш код в указанном виде не подходит. Ибо кроме пробелов в качестве разделителей могут выступать и иные символы. Иллюстрация:
@echo off
setlocal enableextensions enabledelayedexpansion

set sVar=Мама,Мыла;раму

call :v %sVar%
pause& exit

endlocal
exit /b 0

:v
echo [%1] [%2] [%3] [%4]

if not "%~2"=="" echo Ошибка
exit /b

http://i.imgur.com/HV0XI5c.png
— пробелов нет, а код ошибочно полагает, что есть.

alpap
08-05-2017, 18:57
Iska,
да, позже уже сам понял что подход неправильный (например: %1переданный - aaa;bbb в выводе будет иметь два параметра aaa и bbb)
ничего, подобные ошибки тоже нужны на форуме для практики




© OSzone.net 2001-2012