2013-05-19 18 views

Odpowiedz

42

:: (zwana także etykieta komentarza) to komentarz tak samo jak REM.

Pomiędzy nimi występują pewne różnice. Główne z nich to:

  • Z ECHO ONREM linia pokazał ale nie linia skomentował z ::
  • :: można wykonać daszek końcowy linii (to jest ^ na końcu linii zaczynając :: powoduje, że następny wiersz również jest komentarzem).
  • Etykiety i :: mają specjalną logikę i mogą powodować problemy w blokach nawiasów - należy zachować ostrożność podczas korzystania z nich wewnątrz ().
+3

Kiedy przytoczyć, że '' :: "jest również nazywany _comment label_" powinien zawierać link do źródła _official_ gdzie Zrozumiałeś cytować; w przeciwnym razie przyczyniasz się do rozpowszechniania popularnych przekonań, które mogą być błędne. – Aacini

+1

Najważniejszą różnicą jest specjalna logika wewnątrz bloków nawiasów. Byłoby wspaniale, gdyby można dodać zasób, aby uzyskać więcej informacji na ten temat. – McK

+3

Obsługa w blokach jest opisana w [SO: polecenie goto nie działa] (http://stackoverflow.com/a/4006006/463115) i więcej na temat [SO: Który styl komentarza powinienem używać w plikach wsadowych?] (http://stackoverflow.com/a/12408045/463115) – jeb

11

Linia zaczynając od dwukropka jest znacznikiem, który można przejść do z goto:

goto end 
:end 

Linia wychodząc z podwójnym dwukropku to etykieta, chyba nie można, nawet przypadkowo, przeskocz do niego:

goto :end REM this doesn't work 
::end 

Tak więc dwukrotny dwukropek służy do komentowania linii.

Źródło: http://www.robvanderwoude.com/comments.php

1

dwukropek (:) jest markerem etykieta i może być stosowany do dostali instrukcje.

Niektórzy używają: jako komentarz zbyt więc podwójny dwukropek jest po prostu stylistyczny oświadczenie REM

41

linii, która rozpocznie się w podwójnym dwukropkiem oznaczają nieprawidłową etykietę że jest ignorowany przez procesor poleceń, więc może użyć, aby wstawić komentarz. Z przyczyn, których nie można zidentyfikować, wiele osób używa :: do wstawiania komentarzy w plikach wsadowych, ale musisz mieć świadomość, że w jego użyciu jest kilka pułapek opisanych w linku podanym w odpowiedzi Koterpillar. Wydaje się, że pierwsze użycie polecenia :: zamiast polecenia REM miało na celu przyspieszenie wykonywania plików wsadowych na wolnych komputerach (np. Dyskietkach), ale ten powód nie jest uzasadnionym uzasadnieniem użycia dwukropka, ponieważ wiele Lata temu.

Każda linia zawierająca niepoprawną etykietę zostanie zignorowana przez procesor poleceń, a do wygenerowania nieprawidłowej etykiety można użyć praktycznie dowolnego znaku specjalnego.Na przykład:

@echo off 

:~ This is a comment 
:` This is a comment 
:! This is a comment 
:@ This is a comment 
:# This is a comment 
:$ This is a comment 
:% This is a comment 
:^ This is a comment 
:& This is a comment 
:* This is a comment 
:(This is a comment 
:) This is a comment 
:_ This is a comment 
:- This is a comment 
:+ This is a comment 
:= This is a comment 
:{ This is a comment 
:} This is a comment 
:[ This is a comment 
:] This is a comment 
:| This is a comment 
:\ This is a comment 
:: This is a comment 
:; This is a comment 
:" This is a comment 
:' This is a comment 
:< This is a comment 
:> This is a comment 
:, This is a comment 
:. This is a comment 
:? This is a comment 
:/ This is a comment 

echo OK 

Innymi słowy: jeśli chcesz wstawić komentarz i nie chcesz użyć komendy REM (choć nie mogę wymyślić żadnego powodu, aby to zrobić), masz 32 możliwych kombinacji znaków aby to zrobić. Dlaczego powinieneś używać właśnie tego: ::? Tylko dlatego, że zrobiły to stare programy napisane 35 lat temu?

+1

W ogóle masz rację (prawie zawsze), ale nie rozumiem, dlaczego stworzyłeś tę listę? '" ~ ''! @ # $ %% *() _- {} [] \ '.?/^ & | <> 'są etykietami prawnymi, tylko' + =,;: 'nie może być używane jako Etykiety: – jeb

+0

@jeb: Chcę tylko, aby czytelnik zrozumiał, że użycie '' 'do wstawiania" komentarzy "nie ma uzasadnionej podstawy. – Aacini

+3

Ponieważ nie możesz wymyślić powodów, dam ci dwa: ** czytelność ** ('' 'wyróżnia się jako nie-alfabetyczny w większości znaków alfabetycznych w skrypcie wsadowym ... a jeśli pochodzisz z C++, gdzie' // 'jest komentarzem w jednym wierszu,' :: 'w pewnym sensie ma sens w tym samym celu) i ** oszczędzając miejsce ** (jeśli kiedykolwiek przekroczyłeś górny limit - gdzieś poniżej 60 kB - ze skryptem docenisz możliwość zapisania bajtów ... i tak, są także dobre powody dla tak dużych monolitycznych skryptów) – 0xC0000022L

5

Jak wspomniano przez acdcjuniorEtykiety i :: mają specjalną logikę i mogą powodować problemy w blokach nawiasie

Oto kilka próbek

Próbka 1

IF 1==1 (
    :: 
) 

Wyjście próbki 1

) was unexpected at this time. 

Próbka 2

IF 1==1 (
    :: 
    :: 
) 

Wyjście próbki 2

The system cannot find the drive specified. 
Powiązane problemy