Napisałem ogromny plik wsadowy MS DOS. Aby przetestować ten plik wsadowy, muszę wykonać tylko niektóre wiersze i chcę ukryć / skomentować pozostałe.
Mam kilka istniejących linii komentarzy zaczynających się od, ::
dlatego nie mogę ich ::
już używać, ponieważ spowoduje to pomieszanie wszystkich komentarzy.
Jak mogę rozwiązać ten problem?
batch-file
comments
dos
user219628
źródło
źródło
REM
wierszy jako wierszy komentarzy, to sprawia, że dane wyjściowe są niejasneJeśli chcesz dodać REM na początku każdej linii zamiast używać GOTO, możesz użyć Notepad ++, aby zrobić to łatwo, wykonując następujące kroki:
Powtórz kroki, aby odkomentować
źródło
Ctrl-Q
, kliknijNotepad++
:Edit -> Comment/Uncomment
.Chociaż
goto
rozwiązanie jest dobrą opcją, nie będzie działać w nawiasach kwadratowych (łącznie z poleceniami FOR i IF), ale tak będzie. Chociaż powinieneś uważać na zamykające nawiasy i nieprawidłową składnię poleceńFOR
iIF
, ponieważ zostaną one przeanalizowane.Aktualizacja
Aktualizacja w odpowiedzi dbenham dała mi kilka pomysłów. Po pierwsze - istnieją dwa różne przypadki, w których możemy potrzebować komentarzy wieloliniowych - w kontekście nawiasów, gdzie nie można użyć GOTO i poza nim. Kontekst nawiasach możemy użyć innego wsporniki jeśli jest to warunek, który zapobiega kod będzie executed.Though Thede kod nadal będą przetwarzane i zostaną wykryte jakieś błędy składniowe (
FOR
,IF
, wsporniki nieprawidłowo zamknięte, niewłaściwy parametr ekspansja ..). So jeśli to możliwe, lepiej użyć GOTO.Chociaż nie jest możliwe utworzenie makra / zmiennej używanej jako etykieta - ale jest możliwe użycie makr do komentarzy w nawiasach, jednak można zastosować dwie sztuczki, aby komentarze GOTO były bardziej symetryczne i przyjemniejsze (przynajmniej dla mnie). W tym celu wykorzystam dwie sztuczki - 1) możesz umieścić pojedynczy symbol przed etykietą, a goto nadal będzie w stanie go znaleźć (nie mam pojęcia, dlaczego tak się dzieje, sądzę, że szuka dysku). 2) możesz umieścić pojedynczą wartość
:
na końcu nazwy zmiennej, a funkcja zastępowania / podciągania nie zostanie uruchomiona (nawet pod włączonymi rozszerzeniami). To w połączeniu z makrami komentarzy w nawiasach może sprawić, że oba przypadki będą wyglądać prawie tak samo.Oto przykłady (w kolejności, w której najbardziej je lubię):
Z prostokątnymi wspornikami :
Z nawiasami klamrowymi :
Z nawiasami :
Mieszanka między stylami PowerShell i C (
<
nie można jej użyć, ponieważ przekierowanie ma wyższy priorytet.*
Nie można jej użyć z powodu%*
):Aby podkreślić , to jest komentarz (myślę, że nie jest taki krótki):
źródło
rem.||(
lubrem^ (
zamiast tego. Zamiar jest nieco jaśniejszy. Zobacz moją zaktualizowaną odpowiedź.%rem:%
+%:rem%
formę, żeby było to bardziej oczywiste, choć straci swój urok lub tylko ukośnik, aby być bliżej stylu C ...Inną opcją jest umieszczenie niechcianych wierszy w bloku IF, który nigdy nie może być prawdziwy
Oczywiście nic w bloku if nie zostanie wykonane, ale zostanie przeanalizowane. Więc nie możesz mieć w nim nieprawidłowej składni. Ponadto komentarz nie może zawierać
)
znaków, o ile nie jest poprzedzony znakami ucieczki lub cudzysłowem. Z tych powodów przyjęte rozwiązanie GOTO jest bardziej niezawodne. (Rozwiązanie GOTO może być również szybsze)Aktualizacja 2017-09-19
Oto kosmetyczne ulepszenie rozwiązania GOTO firmy pdub . Definiuję prostą zmienną środowiskową „makro”, która sprawia, że składnia komentarzy GOTO jest nieco lepsza samodokumentująca. Chociaż generalnie zaleca się, aby: etykiety były unikalne w skrypcie wsadowym, naprawdę można osadzić wiele takich komentarzy w tym samym skrypcie wsadowym.
Lub możesz użyć jednego z tych wariantów rozwiązania npocmaki . Użycie REM zamiast BREAK sprawia, że intencja jest nieco jaśniejsza.
źródło
Chcę tylko wspomnieć, że rozwiązanie GOTO pdub nie jest w pełni poprawne w przypadku: etykieta komentarza pojawia się wielokrotnie. Jako przykład modyfikuję kod z tego pytania .
Wynik będzie
Polecenie ECHO TUTAJ W TD_NEXT W PIERWSZYM BLOKU jest pomijane.
źródło
@jeb
Po użyciu tego stderr wydaje się być niedostępny
Nie, spróbuj tego:
Ale dlaczego to działa?
przepraszam, odpowiadam na pytanie w języku frensh:
(la redirection par 3> est spécial car elle persiste, on va l'utiliser pour capturer le flux des erreurs 2> est on va le transformer en un flux persistant à l'ade de 3> ceci va nous permettre d'avoir une gestion des erreur pour tout notre environment de script..par la suite si on veux recuperer le flux 'stderr' il faut faire une autre redirection du handle 2> au handle 1> qui n'est autre que la console ..)
źródło
Spróbuj tego:
źródło