2016-07-18 3 views
0

Ich bekomme jedoch den Fehler 1 was not expected at this time. Wenn Echo eingeschaltet ist, wird if equ 1 ( ausgegeben, in dem der Fehler aufgetreten ist. Bitte beraten Sie, wie Sie das lösen können.Batch-Datei überprüfen, ob eine Variable definiert ist und ihren Wert

+1

'wenn"% myvar% "equ" 1 "' funktionieren sollte; Wenn '% myvar%' ein Leerzeichen oder ein anderes Token-Trennzeichen '' '' '' '' 'enthält oder wenn es andere Sonderzeichen wie'^'' & '' <' '> '' '' enthält, erhalten Sie ein Fehler ohne "" "; Wenn es '' 'enthält, können Sie einen Fehler nur vermeiden, wenn Sie [verzögerte Erweiterung] (http://ss64.com/nt/delayedexpansion.html) verwenden ... – aschipfl

Antwort

0

habe ich /*some condition*/ mit 1==1 ersetzt:

@echo off 
if 1==1 set myvar=1 
if defined myvar (
    if %myvar% equ 1 (
    echo Hurray 
) 
) 

Das funktioniert perfekt. Der Fehler muss also irgendwo in deinem Zustand liegen. Ich denke, Aschipfl hat recht über die fehlende delayed expansion. Versuchen Sie folgendes:

@echo off 
setlocal enabledelayedexpansion 
if /*some condition*/ set myvar=1 
if defined myvar (
    if !myvar! equ 1 (
    echo Hurray 
) 
) 

Add enabledelayedexpansion und Surround Ihre Variablen mit !...! statt %...%.

+0

Was macht! var! do? –

+0

Variablen werden erweitert Zur Interpretation: Dies bedeutet, dass Ihr Skript verarbeitet wird und alle Werte auf die Variablen gesetzt sind. Wenn die Variable ihren Wert ändert und der neue Wert nicht am Anfang des Skripts berechnet werden kann (z. B. wenn es von der Eingabe des Benutzers abhängt), Wenn es in einem If- oder einem For-Konstrukt ist, ändert der Wert seinen Wert nicht.Um den Wert "neu berechnen" zu lassen, müssen Sie ihn mit! ... umgeben! Dies wird als verzögerte Expansion bezeichnet. – MichaelS

+0

Aber in diesem Falls die Variable bereits vor dem Beginn des Codeblocks gesetzt wurde, ist eine verzögerte Erweiterung nicht erforderlich, da Aschipfl die wahre Ursache des Problems in seinen Fragekommentaren (oder anderen Token-Trennzeichen) innerhalb des Werts identifiziert hat, die auftauchen der IF - Parser, leicht zu lösen durch dding zitiert um beide Seiten des Vergleichs. Die Verwendung der verzögerten Expansion vermeidet auch das Problem, aber aus einem völlig anderen Grund als das, was Sie erklärt haben. – dbenham

Verwandte Themen