2016-05-06 4 views
4

Я использую call команду:Как проверить, существует ли переменная в пакетном файле?

call beingcalled.bat randomnumber 

В beingcalled.bat:

@echo off 
set call=%1 
echo %call% 
set call=%call%%call% 
call caller.bat %call%` 

В caller.bat:

@echo off 
set calltwo=%1 
echo %calltwo% 
if "%calltwo%"== "" (
    echo Error 
) else (
    call beingcalled.bat randomnumber 
) 

Почему команда не if "%calltwo%"== "" Работа? И как я вижу, была ли установлена ​​переменная?

+1

насчет ', если они определены calltwo'? – aschipfl

+2

ваш 'if' _is_ работает, но переменная никогда не пуста - вы успешно создали бесконечный цикл и, наконец, получите errormessage (переполнение глубины рекурсии). – Stephan

ответ

10
IF "%Variable%"=="" ECHO Variable is NOT defined 

Это должно помочь, но это работает, при условии, что значение переменной не содержит двойные кавычки. Или вы можете попробовать. Оба работали на меня.

VERIFY OTHER 2>nul 
SETLOCAL ENABLEEXTENSIONS 
IF ERRORLEVEL 1 ECHO Unable to enable extensions 
IF DEFINED MyVar (ECHO MyVar IS defined) ELSE (ECHO MyVar is NOT defined) 
ENDLOCAL 

источник http://www.robvanderwoude.com/battech_defined.php

2

Самый простой способ - просто использовать расширение командной строки DEFINED. Это также мой предпочтительный способ сделать это.

в вашем случае:

@echo off 
set calltwo=%1 
echo %calltwo% 
if defined calltwo (
echo Error 
)else (
call beingcalled.bat randomnumber 
) 

Если это не работает для вас есть обходной путь в ссылке ниже.

Вопрос также дубликат: Check if an environment variable is defined without command extensions and without using a batch file?