Как проверить, существует ли переменная в пакетном файле?

Я использую команду call:

call beingcalled.bat randomnumber

В becalled.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

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

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

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
)

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

Вопрос также является дубликатом: Проверьте, не определена ли переменная среды без расширений команд и без использования командного файла?

Ответ 3

Это просто продолжение комментария (и щедрости) от @Rishav

Heres трюк, который я взял очень давно:

@ECHO OFF

SET Foo=%1

ECHO ==  Start  ====================

ECHO %Foo%

IF %Foo%x == x ECHO Parameter not set

ECHO ==  End  ====================
ECHO.

Если параметр не задан, вы получаете проверку x==x

Если параметр установлен (скажем, "asdf"), вы получаете чек asdfx==x