2016-07-11 2 views
7

Zu Beginn eines Batch-Skript, sah ich den Befehl:Unterschied zwischen "@echo off" und "@echo% off"?

@echo %off 

Zu meiner Überraschung es die gleiche Wirkung hat:

@echo off 

Was die Wirkung des ‚%‘ Präfix ist?

+0

sah nie. Und in der Tat wird das '%' vom Parser entfernt, so dass es keinen Effekt hat (zumindest im reinen Batch), aber es gibt einige Stapel-was auch immer Hybrid-Skripte, wo es * einen Unterschied machen könnte. Kannst du uns eine Quelle geben? (Wo hast du das gesehen?) – Stephan

+0

Ich habe es noch nie zuvor gesehen. Es funktioniert nicht in der cmd-Konsole - nur in einem .bat-Skript. Ich nehme an, es ist so, dass, wenn jemand das Skript in ein Konsolenfenster anstatt in eine .bat-Datei kopiert, die Eingabe nicht dazu führt, dass die Eingabeaufforderungen ausgeblendet werden? – rojo

+0

In einer Batchdatei wird das einzelne '%' Zeichen einfach entfernt, daher ist der Effekt der selbe wie es nicht vorhanden war ... – aschipfl

Antwort

14

Ich habe es noch nie zuvor gesehen. Es funktioniert nicht in der cmd-Konsole - nur in einem .bat-Skript. Aber ich habe eine Vermutung.

Wenn Sie in einem Cmd-Konsolenfenster @echo off eingeben, werden Befehlsaufforderungen wie in einem .bat-Skript ausgeblendet. Um die Eingabeaufforderungen erneut anzuzeigen, müssen Sie echo on. Der Unterschied besteht darin, dass in einem .bat-Skript Prozentzeichen verdoppelt werden müssen, um ein Literalzeichen % darzustellen, während dies in der cmd-Konsole nicht der Fall ist. Das Ergebnis ist, dass @echo %off in einer Cmd-Konsole dazu führt, dass die Zeichenfolge %off an stdout zurückgegeben wird.

Vor diesem Hintergrund vermute ich, dass der Autor diesen Hack beabsichtigt, um Probleme zu vermeiden, die von Benutzern gefunden wurden, die das Skript in ein cmd-Konsolenfenster kopierten anstatt wie beabsichtigt in ein .bat-Skript. Wenn % hinzugefügt wird, wird der Befehl in der Konsole kastriert, erreicht aber dennoch seine beabsichtigte Wirkung, wenn er von einem .bat-Skript ausgeführt wird. Ohne die % scheint die Konsole zu hängen, nachdem alle Anweisungen abgeschlossen wurden.

hung console

+1

Das ist Genie. Ich wollte nur einen Kommentar hinterlassen, der dich wissen lässt. –