Bir toplu iş / cmd'de “yorum yapma” (yorum ekleme) nasıl yapılır?


881

Tablo değişiklikleri yapmak birkaç python komut dosyalarını çalıştıran bir toplu iş dosyası var.

  1. Kullanıcıların toplu iş dosyasından kaldırmak yerine, çalıştırmak istemedikleri 1-2 python betiklerini yorumlamasını istiyorum (böylece bir sonraki kullanıcı bu betiklerin seçenek olarak var olduğunu biliyor!)

  2. Ayrıca, özellikle Toplu dosyada çalıştırmadan önce güncellemeleri gereken değişkenleri dikkatlerini çekmek için yorum eklemek istiyorum. Kullanabileceğimi görüyorum REM. Ancak bu, kullanıcıyı çalıştırdıktan sonra ilerleme ile güncellemek için daha fazla gibi görünüyor.

Daha uygun bir yorum eklemek için bir sözdizimi var mı?


6
Ayrıca buradaki mükemmel yanıtlara da bakınız stackoverflow.com/q/12407800/1011025
ndemou

2
Şunları yapabilirsiniz Kullanım Rem SthKomut Veya Kullanım Bu Mark::: Sth
scientist_7

Yanıtlar:


879

remKomut yorumlar için gerçekten de öyle. Komut dosyasını çalıştırdıktan sonra kimseyi doğal olarak güncellemez. Bazı komut dosyası yazarları bunu bunun yerine kullanabilir echo, çünkü varsayılan olarak toplu yorumlayıcı işlenmeden önce her komutu yazdıracaktır . Yana remkomutlar şey yapmayın, bu yan etkiler olmadan bunları yazdırmak için güvenlidir. Bir komutu yazdırmaktan kaçınmak için, komutun önüne önek koyun @veya bu ayarı program boyunca uygulamak için çalıştırın @echo off. ( echo offBaşka komutlar yazdırmaktan kaçınmak; yankı ayarının etkinleşmesinden önce bu komutu @yazdırmaktan kaçınmaktır .)

Yani, toplu iş dosyanızda şunları kullanabilirsiniz:

@echo off
REM To skip the following Python commands, put "REM" before them:
python foo.py
python bar.py

405
ayrıca iki nokta üst üste "::" kullanabilirsiniz. Toplu iş dosyası çalıştırıldığında bu satırı görüntülemeden veya yürütmeden toplu iş dosyasına açıklama eklemenin iki yolundan biridir. REM'den farklı olarak, toplu iş dosyasında ECHO kapalı olup olmadığına bakılmaksızın bu satır gösterilmez.
Brent81

12
@ Brent81 Bunun doğru cevap olması gerektiğini hissediyorum. Sözdizimi kullanılırken REM komutunu vurgulamak, metni gerçekten "yorum yapılmamış" olarak vurgulamaz.
Automatico

17
Çift kolon bir "geçersiz etiket" tir; İşte bunu açıklayan bir makale ve performansının neden REM'den
Michael Paulukonis

4
İlginç. Ben REM 'bütün çizgi yorum' ve çift kolon 'inline yorum' olsa, gibiREM This whole line is a comment @echo off :: This comment is inline
Richard Smith

@Alhadis, Perl'in Configure betiği Windows toplu işleminde değil Bourne kabuğunda yazılmıştır, bu yüzden burada nasıl alakalı? Ayrıca, kolon komutunun geçerli Bourne sözdizimi olması "bonus yan etki" değildir; o tam da bu yüzden o ki kullanılan Bourne senaryo . #Yorumlar lehine kullanılır, çünkü #açıkça, Configure'un desteklemesi amaçlanan tüm kabuklarda geçerli bir yorum işaretçisi olmayabilir ; 3. satıra bakınız
Rob Kennedy

955

::Veya kullanınREM

::   commenttttttttttt
REM  commenttttttttttt

AMA (insanların belirttiği gibi):

  • Satır içi kullanıyorsanız, &karakter eklemeniz gerekir :
    your commands here & :: commenttttttttttt
  • İç içe mantık ( IF/ELSE, FORdöngüler, vb.) İçinde REMçünkü ::hata veriyor.
  • :: içinde başarısız olabilir setlocal ENABLEDELAYEDEXPANSION

79
Çift kolon :: en temiz .bat yorumu var. Ve bir çizginin başında veya ortasında kullanılabilir!
ATSiem

10
Bu şekilde satır içi yapıldığında benim için çalışmadı. cd "C:\Folder" ::this throws a syntax error
Shaun Rowan

3
Ayrıca git add :: blah this is not a comment"fatal: pathspec 'blah' hiçbir dosyayla eşleşmedi" ile başarısız
Bob Stein

19
Örnekle aynı satırda yorum &yapmak için kod ve yorum arasına eklemeniz gerekir ::. Örnek olarak, cmd istemi ve çalıştırma açık dir ::blahiçeriğini listelemek etmeyen .ve ile karşılaştırmak dir & ::blahişlevi gören
Rado

19
Uyarı, kullanarak ve ::ile komut dosyaları hata olacaksetlocal ENABLEDELAYEDEXPANSIONfor
Azevedo

50

Hayır, düz eski toplu iş dosyaları REMyorum olarak kullanılır. ECHOekranda bir şeyler basan komuttur.

Kullanabileceğiniz dosyanın bölümlerini "yorumlamak" için GOTO. Tüm bu komutlara / tekniklere bir örnek:

REM it starts here the section below can be safely erased once the file is customised
ECHO Hey you need to edit this file before running it!  Check the instructions inside
ECHO Now press ctrl-c to interrupt execution or enter to continue
PAUSE
REM erase the section above once you have customised the file
python executed1.py
ECHO Skipping some stuff now
GOTO End
python skipped1.py
python skipped2.py
:END
python executed2.py

Ne söyleyebilirim? toplu iş dosyaları uzun zaman önce bir kalıntı, tıknaz ve çirkin.

Bu web sitesinde daha fazla bilgi bulabilirsiniz .

EDIT: görünüşte aradığınız öğeleri içermesi için örneği biraz değiştirdi.


31

:: REM yerine bilgisayarların çok hızlı olmadığı günlerde kullanılıyordu. REM'ed satırı okunur ve ardından içe aktarılır. :: 'ed satırı tamamen yok sayılır. Bu, "eski günlerde" kodunuzu hızlandırabilir. Dahası bir REM'den sonra bir alana ihtiyacınız var, sonra :: ihtiyacınız yok.

İlk yorumda belirtildiği gibi: İhtiyacınız olduğunu düşündüğünüz herhangi bir satıra bilgi ekleyebilirsiniz

SET DATETIME=%DTS:~0,8%-%DTS:~8,6% ::Makes YYYYMMDD-HHMMSS

Parçaların atlanmasına gelince. REM'i her satırın önüne koymak oldukça zaman alabilir. Belirtildiği gibi, parçaları atlamak için GOTO kullanmak büyük kod parçalarını atlamanın kolay bir yoludur. Kodun devam etmesini istediğiniz noktada bir: LABEL ayarladığınızdan emin olun.

SOME CODE

GOTO LABEL  ::REM OUT THIS LINE TO EXECUTE THE CODE BETWEEN THIS GOTO AND :LABEL

SOME CODE TO SKIP
.
LAST LINE OF CODE TO SKIP

:LABEL
CODE TO EXECUTE

1
Çift kolonlu bir satır okunmadan nasıl göz ardı edilebilir? Tercüman, çizgiyi çift kolonlu bir hat olarak tanımadan önce okumalı mı?
Rob Kennedy

2
@RobKennedy Ben cevabı okurken, :: sonra hiçbir şey okumaz, burada REM sonra her şey okunur.
James Jenkins

5
Komut yorumlayıcısı @James okumayı durdurursa , hiçbir zaman dosyanın hiçbirini yürütmez. Açıkçası, yorumun nerede biteceğini ve dosyanın sonraki satırının nerede başladığını keşfetmek için okumaya devam etmesi gerekiyor. Bunu aynı şekilde ::ve remeşit olarak yapmak zorundadır .
Rob Kennedy

2
@RobKennedy, ayrıca yalnızca komutun bulunduğu satıra uygulandığını ima ettiğini düşündüm.
James Jenkins

7
@RobKennedy okuyor ama okuduğunu ayrıştırmıyor (veya işlemiyor ), sadece bir sonrakine kadar atlıyor \nve sonra tekrar ayrıştırmaya başlıyor [alıntı gerekli]
xDaizu

25

Çok satırlı yorumlar

Yorum yapmak istediğiniz çok sayıda satır varsa, her satırı yorumlamak yerine çok satırlı yorum yapabilmek daha iyi olacaktır.

Bkz açıklama bloğu üzerinde Woude der Rob van tarafından bu yazı :

Toplu dilin yorum blokları yoktur, ancak efekti gerçekleştirmenin yolları vardır.

GOTO EndComment1
This line is comment.
And so is this line.
And this one...
:EndComment1

GOTOBlok yorumları yapmak için Etiket ve: Etiket'i kullanabilirsiniz .

Veya, toplu iş dosyasının sonunda yorum bloğu görünürse, EXITkodun sonuna ve ardından anlamanız için istediğiniz sayıda yorum yazabilirsiniz .

@ECHO OFF
REM Do something
  •
  •
REM End of code; use GOTO:EOF instead of EXIT for Windows NT and later
EXIT

Start of comment block at end of batch file
This line is comment.
And so is this line.
And this one...

Bu genellikle hibrid toplu iş ve VBS / JS komut dosyalarında kullanılır, ancak stackoverflow.com/q/9074476/995714if yerine ss64.com/vb/syntax-hybrid.html stackoverflow.com/a/34512715/995714goto
phuclv

13

Komutlarla aynı satıra yorum ekleme: use & :: comment

color C          & :: set red font color
echo IMPORTANT INFORMATION
color            & :: reset the color to default

Açıklama:

&iki komutu ayırır , bu nedenle bu durumda color Cilk komut ve :: set red font colorikincisidir.


Önemli:

Yorum içeren bu ifade sezgisel olarak doğru görünüyor:

goto error1         :: handling the error

ancak yorumun geçerli bir kullanımı değildir . Yalnızca gotoilkinden önceki tüm argümanları yok saydığı için çalışır . Kanıt kolaydır, bu gotoda başarısız olmaz:

goto error1 handling the error

Ama benzer girişim

color 17            :: grey on blue

nedeniyle 4 argümanlar bilinmeyen komutu yürütülürken başarısız colorkomutu: ::, grey, on, blue.

Yalnızca şu şekilde çalışır:

color 17     &      :: grey on blue

Ve ve işareti kaçınılmazdır.


Diğer cevaplardan, ve işareti gerekli değil mi?
RoG

3
@Snaptastic - Bu noktada diğer cevaplar aslında yanlış, son düzenlememe bakın.
miroxlav

Bu doğru bir yol gibi görünüyor; IDE'mde yorum olarak bile vurgulanıyor.
baburao

5

Sen kullanılarak şey yorum yapabilirsiniz ::ya REM:

your commands here
:: commenttttttttttt

veya

your commands here
REM  commenttttttttttt

 

Komutla aynı satırda yapmak için bir ve işareti eklemeniz gerekir:

your commands here      & ::  commenttttttttttt

veya

your commands here      & REM  commenttttttttttt

 

Not:

  • Kullanılması :: iç içe mantığında ( IF-ELSE, FORdöngüler, vs ...) hataya neden olur. Bu gibi durumlarda REMbunun yerine kullanın.

Bu T.Todua'nın cevabına dayanmaktadır. Yanıtlarının iyi olduğunu hissettim, ancak bazı önemli detayları dışarıda bıraktım, ancak düzenlememi geri aldılar, bu yüzden revizyonumu kendi cevabına dönüştürüyorum.
Pikamander2

Pikamander2, revizyonunuz (ayrıca, kullanıcı tarafından işaret edildiğinde @Rado o zaman cevap olarak birleştirildi ve bunun için teşekkürler, sadece cevap için başka bir stil tercih ettim ve farklı stil kullandım.
T.Todua

1

Bu eski bir konu ve bu ilginç konunun bilgisini genişletmek için anlayışımı buraya eklemek istiyorum.

REM ve :: arasındaki temel fark şudur:

REM bir komutun kendisidir, :: ise DEĞİLDİR.

:: bir belirteç olarak CMD ayrıştırıcısı bir satırdaki ilk boş olmayan alanla karşılaşır karşılaşmaz bu :: jeton olarak, tüm satırı atlayacak ve sonraki satırı okuyacaktır. Bu nedenle, satır için bir yorum olarak işlev görebilmek için REM'i en az bir boşluk izlemeliyken, :: arkasında herhangi bir boş alana ihtiyaç duymaz.

REM'in kendisinin bir komut olduğu en iyi aşağıdaki FOR sözdiziminden anlaşılabilir

Temel FOR sözdizimi aşağıdaki gibidir

FOR %v in (set) DO <Command> [command param] 

burada <Command>herhangi bir geçerli komut olabilir Bu yüzden rembir komut olarak aşağıdaki geçerli komut satırını yazabiliriz

FOR %i in (1,2,3) DO rem echo %i

Ancak, aşağıdaki satırı ::bir komut olarak yazamayız

FOR %i in (1,2,3) DO :: echo %i

3
teknik olarak, ::(geçersiz) bir etikettir (davranışını açıklar) ve bu yüzden kullanılmamalıdır (hala oldukça yaygın olmasına rağmen)
Stephan

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.