2016-07-11 6 views
7

Na początku skryptu wsadowego, widziałem polecenie:Różnica między "@echo off" i "@echo% off"?

@echo %off 

Ku mojemu zaskoczeniu jest to ten sam efekt:

@echo off 

Jaki jest efekt „%” prefiks?

+0

Nigdy tego nie widziałem. I rzeczywiście, '%' jest usuwany przez parser, więc to nie ma znaczenia (przynajmniej w czystej partii - ale istnieją pewne wsadowe cokolwiek hybrydowe skrypty, gdzie mogłyby * * czynią różnicę). Czy możesz podać nam źródło? (gdzie to widziałeś?) – Stephan

+0

Nigdy wcześniej tego nie widziałem. Nie działa na konsoli cmd - tylko w skrypcie .bat. Przypuszczam, że to tak, że jeśli ktoś copypastes skrypt w oknie konsoli, zamiast pliku .bat, pasta nie spowoduje komunikaty są ukryte? – rojo

+0

w pliku wsadowym, pojedynczy '%' znak zostanie usunięty simle, stąd efekt jest taki sam, ponieważ nie było tam ... – aschipfl

Odpowiedz

14

Nigdy wcześniej tego nie widziałem. Nie działa na konsoli cmd - tylko w skrypcie .bat. Ale zgaduję.

W oknie konsoli cmd, jeśli @echo off, powoduje to ukrywanie podpowiedzi poleceń, tak jak w skrypcie .bat. Aby ponownie wyświetlić monity, musisz: echo on. Różnica polega na tym, że w .bat skryptu procent znaki muszą być podwojone do reprezentacji literalnej znaku % ciąg, podczas gdy w konsoli cmd nie. Powoduje to, że @echo %off w konsoli cmd powoduje, że ciąg %off jest odtwarzany echem na standardowe wyjście.

Biorąc to pod uwagę, domyślam się, że autor zamierzał użyć tego hacka, aby uniknąć problemów napotykanych przez użytkowników, którzy kopiują skrypt do okna konsoli cmd, a nie jak zamierzono w skrypcie .bat. Po dodaniu % polecenie jest unieważniane w konsoli, ale nadal osiąga zamierzony efekt po uruchomieniu ze skryptu .bat. Bez % konsola wydaje się zawieszać po zakończeniu wszystkich instrukcji.

hung console

+1

To jest geniusz. Chciałem tylko rzucić komentarz, który cię poinformował. –