2016-07-11 31 views
7

All'inizio di uno script batch, ho visto il comando:Differenza tra "@echo off" e "@echo% off"?

@echo %off 

Con mia grande sorpresa ha lo stesso effetto di:

@echo off 

Qual è l'effetto del prefisso '%'?

+0

mai visto. E infatti, '%' viene rimosso dal parser, quindi non ha alcun effetto (almeno nel puro batch - ma ci sono alcuni batch, qualunque sia lo script ibrido, dove * potrebbe * fare la differenza). Puoi darci una fonte? (dove l'hai visto?) – Stephan

+0

Non l'ho mai visto prima. Non funziona nella console cmd - solo in uno script .bat. Suppongo che sia così che se qualcuno copypastes lo script in una finestra di console piuttosto che in un file .bat, l'incollamento non comporterà l'occultamento dei prompt? – rojo

+0

In un file batch, il singolo segno '%' viene rimosso similmente, quindi l'effetto è lo stesso che non c'era ... – aschipfl

risposta

14

Non l'ho mai visto prima. Non funziona nella console cmd - solo in uno script .bat. Ma ho una supposizione.

In una finestra della console cmd, se si @echo off, risulta che i prompt dei comandi sono nascosti, proprio come in uno script .bat. Per visualizzare nuovamente i prompt, è necessario echo on. La differenza è che in uno script .bat, i segni di percentuale devono essere raddoppiati per rappresentare un carattere letterale %, mentre nella console cmd non lo fanno. Il risultato è che @echo %off in una console cmd risulta nella stringa %off che viene ripetuta allo stdout.

Con questo in mente, suppongo che l'autore abbia inteso questo trucco per evitare problemi incontrati dagli utenti che copypaste lo script in una finestra della console cmd, piuttosto che come previsto in uno script .bat. Con % aggiunto, il comando viene neutralizzato nella console, ma raggiunge comunque l'effetto desiderato quando viene eseguito da uno script .bat. Senza lo %, la console sembrerebbe bloccarsi dopo che tutte le istruzioni sono state completate.

hung console

+1

Questo è genio. Volevo solo lasciare un commento per farti sapere. –