Eine zusätzliche Bemerkung zur Antwort von FrVaBe .
Normalerweise ^^!
funktioniert das, aber in Anführungszeichen brauchen Sie ^!
stattdessen nur.
echo I want to go out with a bang^^!
echo He said "Bang^!"
Dies ist ein Ergebnis des Escape-Mechanismus des Batch-Parsers.
Zuerst analysiert der Parser eine Zeile und das Caret entgeht dem nächsten Zeichen. In diesem Fall wirkt es sich auf &|<>()"<linefeed>
Anführungszeichen aus , jedoch nur außerhalb von Anführungszeichen, da innerhalb der Anführungszeichen alle Zeichen "normal" sind und das Caret selbst keine Auswirkung hat.
Bei verzögerter Erweiterung folgt ein zusätzlicher Analyseschritt, es gibt dem Caret auch ein Escape-Zeichen für das nächste Zeichen, das jedoch nur das !
und beeinflusst ^
, und Anführungszeichen werden in diesem Analyseschritt ignoriert. Dieser zusätzliche Schritt wird nur ausgeführt, wenn mindestens einer !
in der Zeile vorhanden ist.
setlocal DisableDelayedExpansion
echo DisableDelayedExpansion
echo one caret^^
echo one caret^^ bang! "boom^!"
echo(
setlocal EnableDelayedExpansion
echo EnableDelayedExpansion
echo one caret^^
echo none caret^^ bang^^! "boom^!"
---- AUSGABE ------
DisableDelayedExpansion
one caret^
one caret^ bang! "boom^!"
EnableDelayedExpansion
one caret^
none caret bang! "boom!"
BEARBEITEN
Hier ist ein leicht modifiziertes Beispiel, das die verschiedenen Escape-Permutationen, die je nach Kontext erforderlich sind, besser veranschaulicht. Der einzige Fall, der ein ungewöhnliches Entweichen erfordert, ist das letzte Beispiel, wenn die verzögerte Erweiterung aktiviert ist und mindestens eines !
in der Leitung vorhanden ist.
@echo off
setlocal DisableDelayedExpansion
echo DisableDelayedExpansion
echo caret^^ "caret^"
echo caret^^ bang! "caret^ bang!"
echo(
setlocal EnableDelayedExpansion
echo EnableDelayedExpansion
echo caret^^ "caret^"
echo caret^^^^ bang^^! "caret^^ bang^!"
-- AUSGABE --
DisableDelayedExpansion
caret^ "caret^"
caret^ bang! "caret^ bang!"
EnableDelayedExpansion
caret^ "caret^"
caret^ bang! "caret^ bang!"