Auf der Suche nach einer Lösung zum Drucken von Pfaden innerhalb einer path
Variablen in der Windows-Befehlszeile kam ich zu dieser Lösung. Die Antwort ist dieser Befehl:
echo %path:;=&echo.%
Jetzt frage ich mich, wie das funktioniert.
windows
command-line
Yekanchi
quelle
quelle
echo.
funktioniert möglicherweise nicht .Antworten:
Das ist eine interessante Lösung, die ich noch nie gesehen habe. Lass mich versuchen zu erklären:
echo %path%
. Dadurch werden alle Verzeichnisse in einer einzelnen Zeile gedruckt, die durch Semikolons (;
) getrennt sind.%path:a=b%
die allea
Zeichen durch ersetztb
echo.
wird verwendet, um eine neue Zeile zu drucken&
wird zum Trennen von Befehlen verwendet, z. B.echo line1&echo line2
werden zwei Zeilen gedruckt;
nichts ersetzen und dann eine neue Zeile drucken". Ich kann dazu keine Dokumentation finden, es ist also nur meine Interpretation. Ehrlich gesagt wusste ich nicht einmal, dass das möglich ist, aber los geht's. UPDATE Meine Interpretation dieses Schritts scheint falsch zu sein und wird besser von wizzwizz4 erklärt .quelle
echo path
? Können wir das nicht sagen ? werden %% für Variablen verwendet?set greeting=Hello
und dannecho %greeting%
. Verwirrenderweise handeltPATH
es sich sowohl um einen Befehl als auch um eine Variable, sodass Sie den Befehl eingebenpath
oderecho %path%
dasselbe Ergebnis erzielen.$PATH
zum Beispiel.echo.
ist nicht "der Befehl zum Drucken einer neuen Zeile". Dies ist der Befehlsinterpreter von Microsoft für Windows NTcmd
. und dasecho.
ist einfach der Befehl zum Drucken eines Pfadelements, der sicherstellt, dass, wenn das Pfadelement leer ist, nicht auf die andere Funktionalität von umgeschaltet wirdecho
. Das ersteecho
sollte eigentlich auch einesecho.
sein.Hierbei wird die Substitution von Befehlszeilenvariablen verwendet.
%path:;=&echo.%
bedeutet "%path%
, aber ersetze alle;
s durch&echo.
". Dies bedeutet, dass mitset path=C:\Windows\System32;C:\Windows\;;C:\Python37;
:wird:
Da
&
es sich um ein Befehlstrennzeichen handelt, ist dies äquivalent zu:Aufgrund der Macken von DOS Batch,
echo.
ist identisch mit,echo
außer wenn nichts danach ist. In diesem Fall wird einfach nichts gedruckt, anstatt Ihnen mitzuteilen, ob aktiviertECHO
oder deaktiviert ist. Dies wird die Ausgabe machen:Eigentlich sollte es sein
echo.%path:;=&echo.%
, den Fall zu berücksichtigen, bei dem%PATH%
mit a begonnen wird;
, aber dieser Befehl ist sowieso ziemlich clever.Wenn Sie sich mit detaillierten Details befassen, sollten Sie diese wirklich
echo(
anstelle von verwendenecho.
. Dies liegt daran,echo.
dass es Probleme geben kann, wenn eine Datei aufgerufen wirdecho
, und es ist langsam, weil die Festplatte (%CD%
und ich denke auch, alle%PATH%
) jedes Mal überprüft werden muss, wenn sie ausgeführt wird. (Ich habe keine Kopie von Windows, daher kann ich sie nicht selbst überprüfen. Betrifft das Vorhandensein der Datei nur%CD%
oder irgendwo in der Welt , und was bewirkt sie?)%PATH%
echo
echo.
quelle
echo)
, aber ich erinnere mich nicht wirklich. ;-(echo.
ist die, die vor Jahren am häufigsten im Umlauf war. Es ist das in vielen Büchern. Effizienz ist nicht das Problem. Verrücktes Verhalten, wenn verschiedene Dateien zufällig existieren. Als ichcmd
in OS / 2 einen 32-Bit-Ersatz für das 16-Bit- Format schrieb, war das Unterbrechen von Befehlsnamen bei diesen Satzzeichen und dieses sehr unregelmäßige Parsing-Verhalten eines der Dinge, die ich absichtlich nicht dupliziert und auf das Dokument gesetzt habe Liste der Unterschiede. Ich habeechodot
stattdessen einen externen Befehl eingegeben, den manecho.
nach Belieben aliasen kann.echo(
es sich um die einzig sichere Version handelt.