web-dev-qa-db-de.com

Wie prüfe ich, ob eine Variable in einer Batchdatei existiert?

Ich verwende den Befehl call:

call beingcalled.bat randomnumber

In alscalled.bat :

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

In caller.bat :

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

Warum funktioniert der Befehl if "%calltwo%"== "" nicht? Und wie sehe ich, ob eine Variable gesetzt wurde?

17
Fivos Capone
IF "%Variable%"=="" ECHO Variable is NOT defined

Dies sollte helfen, aber das funktioniert, vorausgesetzt, der Wert von Variable enthält keine doppelten Anführungszeichen. Sie können es auch versuchen. Beide haben für mich gearbeitet.

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

source http://www.robvanderwoude.com/battech_defined.php

26
Rishav

Am einfachsten verwenden Sie einfach die Befehlszeilenerweiterung DEFINED. Dies ist auch meine bevorzugte Art, dies zu tun.

in Ihrem Fall:

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

Wenn dies für Sie nicht funktioniert, finden Sie im folgenden Link eine Problemumgehung.

Die Frage ist auch ein Duplikat von: Überprüfen Sie, ob eine Umgebungsvariable ohne Befehlserweiterung und ohne Verwendung einer Batchdatei definiert ist.

10
K4dse

Dies ist nur eine Fortsetzung des Kommentars (und der Kopfgeld) von @Rishav

Hier ist ein Trick, den ich vor langer Zeit gefunden habe:

@ECHO OFF

SET Foo=%1

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

ECHO %Foo%

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

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

Wenn der Parameter nicht gesetzt ist, wird x==x geprüft.

Wenn der Parameter festgelegt ist (beispielsweise "asdf"), wird asdfx==x überprüft.

2
Philip Kelley