Wenn ich setlocal ENABLEDELAYEDEXPANSION
ein Cmd-Skript festgelegt habe, gibt es eine Möglichkeit, einem zu entkommen! dass ich als Parameter für einen Befehl verwenden möchte?
@echo off
setlocal ENABLEDELAYEDEXPANSION
echo I want to go out with a bang!
echo I still want to go out with a bang^!
batch-file
cmd
Andy Morris
quelle
quelle
Das habe ich gefunden (^^)
quelle
Eine zusätzliche Bemerkung zur Antwort von FrVaBe .
Normalerweise
^^!
funktioniert das, aber in Anführungszeichen brauchen Sie^!
stattdessen nur.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.---- AUSGABE ------
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.-- AUSGABE --
quelle
Vielen Dank. Wenn das Skript eine Variable enthält, deren Wert ein "!" Enthält, wird dieser Wert durch den folgenden Ansatz unverändert wiedergegeben:
quelle