2017-08-24 4 views
2

Wenn eine Umgebungsvariable angegeben wird, die nicht zitiert werden kann, muss ich die Anführungszeichen entfernen.Batchdatei - Wie finde ich Anführungszeichen in einer Zeichenkette?

Zum Beispiel kann mir gegeben werden:

  1. JAVA_HOME=C:\Program Files\Java\jdk1.8.0_144
  2. JAVA_HOME="C:\Program Files\Java\jdk1.8.0_144"

Ich versuche findstr zu verwenden und es scheint, von cmd.exe gut zu arbeiten, aber nicht von meinem Batch Datei. Das ist, was ich habe in test1.bat:

@echo off 

echo.%JAVA_HOME% | findstr \^" 1>nul 
if ERRORLEVEL 0 (
    echo Found Quotes 
) 
if ERRORLEVEL 1 (
    echo No Quotes found 
) 

Das Problem, das ich habe ist, dass die ERRORLEVEL immer 0 zu sein scheint, und ich bekomme immer die Meldung „Found Zitate“ wenn ich test1.bat laufen.

Ich habe diesen Code zum Entfernen von Anführungszeichen for /f "delims=" %%G IN (%JAVA_HOME%) DO SET JAVA_HOME=%%G die funktioniert finden, aber nur, wenn es Angebote gibt, daher müssen die oben genannten findstr Bedingungen richtig funktionieren.

+0

Drei Antworten bis jetzt und jeder behandelt einen anderen Aspekt. Das Hauptproblem mit Ihrem Code ist, dass Sie die [höchste Fehlerstufe zuerst] vergleichen müssen (https://ss64.com/nt/if.html). Sie könnten dies mit einer bedingten Ausführung vermeiden: echo:% AJVA_HOME% | findstr^"> nul 2> & 1 && (echo Zitate gefunden) || (echo no quotes found)' – LotPings

Antwort

1

Batch-Dateien haben bereits die Möglichkeit, Anführungszeichen auf for -loop Variablen wie %%G in Ihrem Beispiel zu entfernen, so dass Sie keine dieser findstr Logik benötigen. Der Grund, warum Ihre for nicht funktioniert, ist, weil Sie die %JAVA_HOME% nicht angeben. Sie müssen immer Argumente mit Leerzeichen angeben.

Von help for, die Syntax ist:

FOR/F [ "Optionen"]% Variable IN ("string") DO Befehl [Befehlsparameter]

Und auf automatische Variablen wie %%G, der Tilde-Operator entfernt Anführungszeichen, wenn sie vorhanden sind.

Von help for:

Zusätzlich Substitution für Variablenreferenzen wurde erweitert. Sie können nun die folgende optionale Syntax:

%~I   - expands %I removing any surrounding quotes (") 

So mit diesen 2 Stücke von Informationen, Ihre for Schleife, um diese Änderung Zitate aus %JAVA_HOME% zu entfernen.

for /f "delims=" %%G IN ("%JAVA_HOME%") DO SET "JAVA_HOME=%%~G" 
+0

Danke, das funktioniert wunderbar, obwohl ich '' JAVA_HOME = %% ~ G \ "' in '" JAVA_HOME = ändern musste %% ~ G "' – adamretter

+0

@adamretter: Hoppla, ich dachte, ich hätte das kopiert und eingefügt, aber es sieht so aus, als hätte ich diesen Tippfehler selbst eingeführt. Ich habe die Antwort bearbeitet, um den Schrägstrich zu entfernen. – indiv

1

Normalerweise müssen Sie vor dem Test auf 0, IIRC nach anderen Werten für ERRORLEVEL suchen. Das funktioniert perfekt für mich:

@echo off 

echo.%JAVA_HOME% | findstr \^" 1>nul 
if ERRORLEVEL 1 (
    echo No quotes found 
    goto :eof 
) 
if ERRORLEVEL 0 (
    echo Found quotes 
) 

HINWEIS: Das Entfernen der goto :eof bedeutet, dass Sie beide Linien Ausgabe von echo, wenn es keine Übereinstimmung gibt.

0
@ECHO OFF 
SETLOCAL 

SET JAVA_HOME=C:\Program Files\Java\jdk1.8.0_144 
SET "java_home=%java_home:"=%" 
SET j 
ECHO ------------------------------------------- 
SET JAVA_HOME="C:\Program Files\Java\jdk1.8.0_144" 
SET "java_home=%java_home:"=%" 
SET j 

GOTO :EOF 

So oder so, endet java_home up "nackt".

Verwandte Themen