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?
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
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.
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.