HOWTO · Batch

Doppelte Anführungszeichen aus einer Variable in einer Batch-Datei entfernen

Erfahren Sie, wann Sie %~1, Variablenersetzung oder FOR /F verwenden, um doppelte Anführungszeichen in Batch-Dateien zu entfernen.

Auf dieser Seite

Verwenden Sie %~1, wenn der Text als Batch-Argument übergeben wird. Verwenden Sie %variable:"=%, wenn jedes doppelte Anführungszeichen aus einer Umgebungsvariablen entfernt werden soll. Wenn nur ein bekanntes äußeres Anführungszeichen-Paar entfernt werden soll, ist FOR /F mit %~A passender. Die drei Verfahren sind nicht austauschbar. Die Beispiele verwenden die sichere Grundform set "name=value" und zeigen auch die Grenzen bei Leerzeichen, Sonderzeichen, leeren Werten und verzögerter Expansion.

Anführungszeichen aus einem Batch-Argument mit %~1 entfernen

Die Parameter %0 bis %9 enthalten den Dateinamen und die an ein Batch-Skript übergebenen Argumente. Wird ein Pfad mit Leerzeichen in Anführungszeichen übergeben, entfernt der Tilde-Modifikator die äußeren Anführungszeichen beim Expandieren des Parameters.

@echo off
set "input=%~1"
echo Input without surrounding quotes: [%input%]
remove-quotes.cmd "Report 2026.txt"
Input without surrounding quotes: [Report 2026.txt]

%~1 funktioniert nur für ein Batch-Argument, nicht für eine beliebige Variable. Für weitere Argumente verwenden Sie %~2 oder %~3. Eingebettete Anführungszeichen werden nicht entfernt.

Alle doppelten Anführungszeichen aus einer Variable entfernen

Die Ersetzungsform %variable:search=replacement% entfernt jedes Vorkommen des Suchzeichens. Das folgende Beispiel entfernt alle Anführungszeichen, nicht nur das erste und letzte:

@echo off
set "value="Hello World""
set "withoutQuotes=%value:"=%"
echo Value: [%value%]
echo Without quotes: [%withoutQuotes%]
Value: ["Hello World"]
Without quotes: [Hello World]

Diese Form ist falsch, wenn innere Anführungszeichen erhalten bleiben müssen. Dieselbe Syntax kann auch Text ersetzen:

@echo off
set "value=Hello World"
set "updated=%value:World=Batch%"
echo [%updated%]
[Hello Batch]

Bei &, |, <, > oder ^ muss der Wert als Daten behandelt werden. Das quotierte set schützt die Zuweisung in üblichen Fällen, macht beliebigen untrusted Text aber nicht zu sicherem Befehlscode.

Nur äußere Anführungszeichen mit FOR /F entfernen

Wenn der Inhalt zwischen dem äußeren Paar unverändert bleiben soll, kann FOR /F die Zeile einlesen und %~A die äußeren Anführungszeichen entfernen. In einer Batch-Datei wird die Schleifenvariable als %%A geschrieben; an der Eingabeaufforderung als %A.

@echo off
set "value="Hello World""
for /f "delims=" %%A in (%value%) do set "withoutOuter=%%~A"
echo Original: [%value%]
echo Without outer quotes: [%withoutOuter%]
Original: ["Hello World"]
Without outer quotes: [Hello World]

delims= verhindert, dass Leerzeichen die Zeile in mehrere Token teilen. FOR /F ist dennoch ein Parser mit eigenen Regeln und kein allgemeiner Parser für beliebigen Befehlstext.

Bei einem leeren Wert sollte die Schleife geschützt werden:

@echo off
set "value="
set "withoutOuter="
if defined value for /f "delims=" %%A in (%value%) do set "withoutOuter=%%~A"
if not defined withoutOuter echo The value is empty
The value is empty

Expansion in Klammerblöcken

cmd expandiert Prozentvariablen beim Parsen einer Zeile oder eines Klammerblocks. Wenn eine Variable innerhalb desselben Blocks geändert wird, kann %value% noch den früheren Wert enthalten. Verzögerte Expansion verändert diesen Zeitpunkt, führt aber zu einer eigenen Grenze bei !:

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "value="Hello World""
set "withoutOuter="
for /f "delims=" %%A in (!value!) do set "withoutOuter=%%~A"
echo Without outer quotes: [!withoutOuter!]
endlocal
Without outer quotes: [Hello World]

Verwenden Sie verzögerte Expansion nur bei Bedarf. Ausrufezeichen in Daten können dabei verändert werden.

Warum Anführungszeichen nicht immer die richtige Reparatur sind

Anführungszeichen können Parser-Syntax oder tatsächliche Daten sein. set "path=C:\Program Files\Tool" speichert normalerweise den Pfad ohne äußeres Paar, während ein absichtlich gespeicherter Wert wie "C:\Program Files\Tool" später bearbeitet werden muss. Besser ist es, Argumente bereits an der Grenze mit %~1 zu normalisieren:

@echo off
set "path=%~1"
if not defined path (
    echo A path argument is required.
    exit /b 1
)
echo Ready to process: [%path%]
Ready to process: [C:\Program Files\Tool]

Prüfen Sie den bereinigten Wert, bevor Sie ihn an del, copy, move oder einen anderen Befehl übergeben. Entfernen von Anführungszeichen validiert keinen Pfad und schützt keinen untrusted Eingabetext.

Methode auswählen

Wählen Sie das Verfahren nach der Herkunft des Werts. %~1 ist für Argumente, %variable:"=% für jedes Vorkommen und FOR /F mit %~A für ein äußeres Paar gedacht.

Grenzen und Fehlersuche

Verwenden Sie %~1 für Parameter, %variable:"=% für das Entfernen aller doppelten Anführungszeichen und FOR /F mit %~A für ein einzelnes äußeres Paar. Ein nicht geschlossenes Anführungszeichen ist fehlerhafte Eingabe; ein globales Entfernen kann den Fehler lediglich verstecken. Ein Batch-Parameter verwendet in der Datei %%A für eine FOR-Variable, während die interaktive Eingabeaufforderung %A verwendet. Wenn ein Wert in einem Klammerblock aktualisiert wird, prüfen Sie die Expansion sorgfältig. Die engste Methode passend zur Eingabe ist normalerweise die sicherste.