2016-05-19 12 views
0

Ich habe diesen Code snippet von einem batch Skript. Das Skript schlägt fehl mit:") war zu diesem Zeitpunkt unerwartet" - Batch-Skript

") zu diesem Zeitpunkt war unerwartet"

SETLOCAL EnableDelayedExpansion 

set var="value " 
    echo !var! 
    IF "!var!"=="value " (
     echo Perfect) 

P. S. Ich brauche die Delayed Expansion in meinem Skript.

+1

Seien Sie vorsichtig bei der Ausgabe von 'wmic' zu einer Umgebungsvariablen zuweisen als wmic Ausgabe in Unicode ist (UTF-16 Little Endian). Lesen Sie die Antworten zu [So korrigieren Sie falsches Fehlverhalten beim Analysieren der Ausgabe] (http://stackoverflow.com/questions/24961755/), um zu erfahren, wie die Ausgabe von "wmic" als ANSI-Zeichenfolge abgerufen wird. – Mofi

+0

Danke für den Rat :) Ja, ich bin auf diesem Teil vorsichtig. Da Sie sich das ausgedacht haben - gibt es irgendeine Möglichkeit, die unerwünschte Ausgabe des wmic-Befehls auf NUL umzuleiten, das heißt, ich möchte nicht, dass dasselbe in der Konsole angezeigt wird. Etwa so: für/f "skip = 1 Token = 7" %% f in ('wmic Prozess wo "name =' java.exe '" Kommandozeile holen') do (set v = %% f) In In diesem Fall, wenn es keine spawning-Instanzen von "java.exe" gibt, sehe ich eine Ausgabe in der Konsole - keine Instanz (en) verfügbar Das ist richtig, aber ich möchte nicht das gleiche in der Konsole angezeigt werden. –

Antwort

0

Der Auszug Sie arbeitet ohne Fehler messages.Though geschrieben haben, wenn Sie den Raum am Ende in den Variablennamen einschließen möchten Sie die Angebote wie folgt verwenden können:

@echo off 
SETLOCAL EnableDelayedExpansion 

set "var=value " 
    echo !var! 
    IF "!var!" == "value " (
     echo Perfect) 

bearbeiten, basierend auf den beglückwünscht :

@echo off 
setlocal enableDelayedExpansion 
for /f "usebackq" %%f in (`"wmic process where name='java.exe' get commandline /format:value"`) do (
    call ::run "%%~f" 
) 

:run 
for /f "tokens=7" %%# in ("%%~1") do set "var=%%#" 
echo "!var!" 
IF "!var!"=="someValue " ( 
    echo Already running 
) Else (
echo S 

gekrönt )

+0

Der Platz ist obligatorisch. Ich bin nicht in der Lage, das gesamte Skript hier einzufügen, aber die Variable var wird im Grunde mit der Ausgabe eines "wmic" -Befehls zugewiesen, der den Raum enthält. Und als die IF-Schleife angetroffen wird, bekomme ich den oben genannten Fehler wie erwähnt. –

+0

@SupertimDas - so müssen Sie einen größeren Teil Ihres Codes einfügen.Möglicherweise werden Ihre Probleme durch [this] ( – npocmaka

+0

) verursacht hier geht es wie folgt: für/f "skip = 1 tokens = 7" %% f in ('wmic prozess wo "name =' java.exe '" get commandline') do ( \t \t gesetzt v = %% f \t \t goto Lauf \t \t) : run \t \t set var = v! \t echo "! Var!" \t IF "! Var!" == "somevalue" ( \t \t \t \t Echo läuft bereits) Else ( \t \t \t Echo Gestoppt) Hier die Ausgabe von dem FOR-Schleife zur Variablen v eingestellt wird, die im Grunde ist die 7. Token der ersten Zeile. Diese Variable wird in 'var' gespeichert und in einer IF-Prüfung verwendet. Selbst wenn die IF-Prüfung wahr ist, führt sie die Befehle innerhalb der IF-Schleife nicht aus. Es gibt eine ganze Reihe von Befehlen in der IF-Schleife, nicht eine einzige Anweisung. –

Verwandte Themen