Die Antwort von DavidPostill ist großartig, kann aber Neulinge ein wenig verwirren. Ich werde versuchen, es anders zu formulieren.
%
ist kein reserviertes Zeichen.
Es ist ein Zeichen mit besonderer Bedeutung für die Befehlsshell (auch bekannt als cmd.exe
und command.com
).
Der Unterschied ist:
- Sie können keine reservierten Zeichen verwenden (siehe unten)
- Möglicherweise können Sie Sonder- und Escape-Zeichen verwenden - nur nicht, indem Sie sie so wie sie sind eingeben
Mit anderen Worten, Sie können eine Datei oder einen Ordner erstellen, die bzw. der %
ihren Namen enthält. Sie können dies direkt mit dem Windows Explorer tun, da er %
dort keine besondere Bedeutung hat. Es war auch nicht beabsichtigt, Sie daran zu hindern, solche Dateien an der Eingabeaufforderung %
zu erstellen. Da diese Dateien jedoch eine besondere Bedeutung haben, müssen Sie zum Erstellen solcher Dateien die unten beschriebene Syntax verwenden.
BAT-Dateien
Wenn Sie eine Batch-Datei (* .bat, * .cmd) schreiben , die von der Befehlsshell (auch als Eingabeaufforderungsanwendung bezeichnet) ausgeführt wird, verwenden Sie sie %
wörtlich (z. B. um eine Datei mit %
dem Namen zu erstellen , und nicht um sie zu ersetzen) Sie müssen %%
stattdessen eine Variable oder einen Parameter eingeben.
Beispielsweise,
- Befehl
echo %windir%
erzeugt Ausgabe:c:\windows
- Befehl
echo %%windir%%
erzeugt jedoch Ausgabe:%windir%
- und so weiter: Befehl
echo %%%%windir%%%%
erzeugt Ausgabe:%%windir%%
Wenn Sie also die folgende Zeile speichern test.bat
und ausführen, wird ein Verzeichnis %test%
mit Prozentzeichen erstellt:
md %%test%%
Wenn keine Variable benannt ist test
, entspricht dieser nächste Befehl dem letzten - es wird auch ein Verzeichnis erstellt %test%
:
md %test%
... aber bitte machen Sie das nie so, da Ihr Befehl sich nicht so verhält, wie Sie es wollten, wenn jemand eine Variable mit diesem Namen erstellt
Wenn Sie den Befehl for
in einer BAT-Datei verwenden %
möchten, müssen Sie ihn auch verdoppeln, damit er for
anstelle der Befehlsshell selbst eine besondere Bedeutung hat:
for %%i in (*.*) do echo %%i
Dadurch wird eine Liste der Dateien im aktuellen Verzeichnis erstellt (das heißt, sie haben %%i
eine besondere Bedeutung), und ich bin nicht sicher, wie ich sie %%i
ohne %p%
die im nächsten Abschnitt beschriebene Problemumgehung als Literal erstellen kann ( %%%%i
funktioniert hier nicht).
%
ist nicht das einzige Zeichen mit besonderer Bedeutung an der Eingabeaufforderung. Andere schließen ^
, <
, >
, |
, (
, )
, &
, !
, "
. Die meisten dieser Zeichen (mit Ausnahme von "
) können maskiert werden, d. H. Mit einem Escape-Zeichen als Präfix, ^
sodass ein Literalzeichen eingefügt wird, das seine spezielle Bedeutung unterdrückt. Diejenigen , auch ihre besondere Funktion innerhalb doublequoted String verlieren, und "
ist mit einem Backslash: \"
. Einige Carets ( ^
) müssen möglicherweise in einem String mit doppelten Anführungszeichen verdoppelt werden, und wenn eine verzögerte Variablensubstitution stattfindet ( !
besondere Bedeutung).
Eingabeaufforderung
Wenn Sie Befehle direkt in das Eingabeaufforderungsfenster eingeben, führt das Verdoppeln von %
Zeichen leider nur dazu, dass %%
der oben beschriebene Ansatz in diesem Fall nicht funktioniert.
Es scheint eine Krücke , um eine Marotte in Befehlsverarbeitung zu nutzen - Sie wörtliche bekommen können %
durch Eingabe ^
nach %
. Dieser Ansatz ist jedoch nicht kinderleicht: Wenn Ihr Dateiname in doppelte Anführungszeichen eingeschlossen ist, ^
wird er wörtlich interpretiert (und nicht wie ohne Anführungszeichen entfernt).
- Befehl
echo %windir%
erzeugt Ausgabe:c:\windows
- Befehl
echo %^windir%
erzeugt Ausgabe:%windir%
- Befehl
echo "%^windir%"
erzeugt Ausgabe: "%^windir%"
(mit extra ^
- nicht was wir wollten)
Ich empfehle stattdessen eine andere Problemumgehung:
- Erstelle eine Variable wie folgt:
set "p=%"
- Verwenden
%p%
Sie diese Option, wo immer Sie ein Prozentzeichen benötigen: Es echo "%p%windir%p%"
wird nun Folgendes ausgegeben:"%windir%"
Dieselbe Problemumgehung kann verwendet werden, um einen wörtlichen Prozentzeichen-Anmeldebefehl for
abzurufen. Beachten Sie jedoch, dass Sie im Gegensatz zu BAT-Dateien beim for
direkten Eingeben des Befehls keine doppelten Prozentzeichen verwenden.
Reservierte Zeichen im Dateisystem
Normalerweise können Sie keine Datei oder kein Verzeichnis erstellen, deren Name die folgenden reservierten Zeichen enthält /
?
<
>
\
:
*
|
"
:, NULL-Symbol und Zeichen mit den Codes 1 bis 31; auch .
und Leerzeichen dürfen keine letzten Zeichen sein; und folgende Namen sind illegal: com1
com2
com3
com4
com5
com6
com7
com8
com9
lpt1
lpt2
lpt3
lpt4
lpt5
lpt6
lpt7
lpt8
lpt9
con
nul
prn
.
Doch einige können diese Einschränkungen umgangen werden Dateipfad voran mit \\?\
wie folgt aus : \\?\c:\test...\nul
. Zumindest Dateien mit reservierten Namen und solche, die mit Leerzeichen und Punkten enden, können auf diese Weise bearbeitet werden.
Darüber hinaus unterstützt das NTFS-Dateisystem selbst mehrere Benennungssubsysteme: DOS, Windows und POSIX. Es ist das Windows-Subsystem, das alle oben genannten Einschränkungen aufweist, während POSIX nur verbietet /
und ein NULL-Symbol verwendet.
GNU / Linux OS (eine Obermenge von POSIX) kann daher Datei- / Verzeichnisnamen erstellen (und löschen), mit denen die meisten normalen Windows-API-Funktionen (und daher Windows-Programme) nicht arbeiten können. Unter Windows XP war es möglich, mit ihnen zu arbeiten, indem das kostenlose "Services For Unix-Subsystem" (SFU) installiert wurde. Unter Vista und höher sind hierfür Tools von Drittanbietern erforderlich. Ich bin mir nicht sicher, ob das neue Subsystem Ubuntu-on-Windows10 das kann.
<test>
. Mit den Dateiverwaltungsfunktionen von Windows ist dies einfach nicht möglich.