Wie dieser Windows-Befehl funktioniert: echo %path:;=&echo.%

Auf der Suche nach einer Lösung zum Drucken von Patches in der Variablen path 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.

Author: JoL, 2018-10-23

3 answers

Das ist eine interessante Lösung, die ich noch nie zuvor gesehen habe. Lassen Sie mich versuchen zu erklären:

  1. Um den gesamten Pfad zu drucken, verwenden Sie echo %path%. Dadurch werden alle Verzeichnisse in einer einzigen Zeile gedruckt, die durch Semikolons getrennt ist (;)
  2. Um eine Zeichenfolge in einer Variablen zu suchen / zu ersetzen, verwenden Sie %path:a=b%, wodurch alle a Zeichen durch b
  3. echo. wird verwendet, um eine neue Zeile zu drucken
  4. & wird verwendet, um Befehle zu trennen, zB echo line1&echo line2 druckt zwei Zeilen
  5. In der Wirkung, semikolons im Pfad werden durch den Befehl ersetzt, um eine neue Zeile zu drucken. Oder vielleicht wird es interpretiert als 'ersetze ; durch nichts, und dann, drucke eine neue Zeile'. Ich kann keine Dokumentation dazu finden, also ist es nur meine Interpretation. Ehrlich gesagt, ich wusste nicht einmal, dass das möglich war, aber los geht ' s. UPDATE Meine Interpretation dieses Schritts scheint falsch zu sein und wird besser durch wizzwizz4 erklärt.
 23
Author: Berend,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-10-23 16:07:31

Dies verwendet die Befehlszeilenvariablenersetzung. %path:;=&echo.% bedeutet " %path%, aber ersetze alle ;s durch &echo.". Dies bedeutet, dass mit set path=C:\Windows\System32;C:\Windows\;;C:\Python37;:

echo %path:;=&echo.%

Wird:

echo C:\Windows\System32&echo.C:\Windows\&echo.&echo.C:\Python37&echo.

Da & ein Befehlstrennzeichen ist, entspricht dies:

echo C:\Windows\System32
echo.C:\Windows\
echo.
echo.C:\Python37
echo.

Aufgrund von Macken von DOS Batch ist echo. identisch mit echo außer wenn nichts danach ist. Wenn dies der Fall ist, wird einfach nichts gedruckt, anstatt Ihnen mitzuteilen, ob ECHO ein-oder ausgeschaltet ist. Dies wird die Ausgang:

C:\Users\wizzwizz4> echo %path:;&echo.%
C:\Windows\System32
C:\Windows\

C:\Python37

C:\Users\wizzwizz4> 

Eigentlich sollte es echo.%path:;=&echo.% sein, den Fall zu berücksichtigen, in dem %PATH% mit einem ; beginnt, aber dieser Befehl ist sowieso ziemlich clever.


Getting into detailed detalias, really echo( sollte anstelle von echo. verwendet werden. Dies liegt daran, dass echo. Probleme haben kann, wenn Sie eine Datei mit dem Namen echo haben, und langsam ist, weil sie die Festplatte überprüfen muss (%CD% und ich denke auch alle %PATH%) jedes Mal, wenn sie ausgeführt wird. (Ich habe keine Kopie von Windows, also kann ich nicht überprüfen Sie es selbst; es ist nur %CD%, oder überall in die %PATH%, daß die Anwesenheit des echo Datei beeinflussen echo., und was tut Sie?)

 31
Author: wizzwizz4,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-10-23 20:06:52

Der Interpreter arbeitet in 2 aufeinanderfolgenden Durchgängen. Pass 1 führt alle Parameterersetzungen aus. Ein wenig dokumentiertes Merkmal der Parametersubstitution ist jedoch, dass für jeden einzelnen Parameter eine sekundäre Substitution mit der Syntax :STRING1=STRING2 nach dem Parameternamen angewiesen wird. Dies wird mehrmals wiederholt, wenn STRING1 mehr als einmal angezeigt wird. Erst dann interpretiert Pass 2 die Zeile zur Ausführung. Versuchen Sie dies zur Entmystifizierung:

Echo %Pfad: WINDOWS=UNIX%

 0
Author: Yves Jodogne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-06-13 14:35:02