Toplu iş dosyalarında hangi yorum stilini kullanmalıyım?


284

Bazı toplu iş dosyaları yazıyorum ve oldukça bilgilendirici olan bu kullanıcı kılavuzuna girdim . Bana gösterdiği bir şey, çizgilerin sadece ile değil REM, aynı zamanda da yorumlanabileceğiydi ::. Diyor ki:

Toplu koddaki yorumlar çift kolon kullanılarak yapılabilir, etiketler yeniden yönlendirme sembollerinden önce işlendiği için REM komutu kullanmaktan daha iyidir. ::<remark>sorun yaratmaz ancak rem <remark>hata üretir.

Öyleyse neden gördüğüm kılavuzların ve örneklerin çoğu REMkomutu kullanıyor? Does ::Windows'un tüm sürümlerinde çalışır?


3
Sadece kayıt için, "REM" Windows 98 altında yeniden yönlendirme ile bir satır yorum yapmak için kullanıldığında sorunlar gördüm.
Digger

6
Bir kenara, @ Digger'in yorumuna göre: Bağlantılı kılavuz, Windows 2000 ve sonrasında bulunan NT komut işlemcisi değil , DOS ( command.exe) içindir . ikincisinde gayet iyi çalışıyor ( en azından Windows XP'den beri ) ve genel olarak resmi sözleşme ve en güvenli seçimdir; iken avantajları vardır, bu sorunlu içinde olan bir hack sonuçta olan bloklar (burada birçok cevapları tartışılan). cmd.exerem <remark>REM::(…)
mklement0


1
Peki, REM ile hangi durum tam olarak hatalara neden olur?
TS TS

Yanıtlar:


360

tl; dr: REM yorumları toplu iş dosyalarına gömmenin belgelenmiş ve desteklenen yoludur.


::aslında hiçbir zaman atlanamayan boş bir etiket, oysa REMhiçbir şey yapmayan gerçek bir komuttur. Her iki durumda da (en azından Windows 7'de) yeniden yönlendirme işleçlerinin varlığı soruna neden olmaz.

Bununla birlikte, ::bir etiket olarak değil, bir tür sürücü mektubu olarak ayrıştırılarak belirli koşullar altında bloklarda hatalı davranış yaptığı bilinmektedir. Tam olarak nerede olduğum konusunda biraz bulanıkım ama bu sadece beni kullanmam için yeterli REM. Bu, toplu iş dosyalarına yorum yerleştirmenin belgelenmiş ve desteklenen bir yoludur, oysa ::yalnızca belirli bir uygulamanın bir yapaylığıdır.


Burada ::bir FORdöngüde sorun yaratan bir örnek bulunmaktadır .

Bu örnek olacak değil adlı bir dosyada çalışmak test.batmasaüstünüzde:

@echo off
for /F "delims=" %%A in ('type C:\Users\%username%\Desktop\test.bat') do (
    ::echo hello>C:\Users\%username%\Desktop\text.txt
)
pause

Bu örnek yorum olarak doğru olarak çalışacak olsa da:

@echo off
for /F "delims=" %%A in ('type C:\Users\%username%\Desktop\test.bat') do (
    REM echo hello>C:\Users\%username%\Desktop\text.txt
)
pause

Sorun, çıktıyı bir dosyaya yeniden yönlendirmeye çalışırken ortaya çıkıyor. En iyi tahminim, ::kaçan bir etiket olarak yorumlanmasıdır :echo.


1
@Firedan: Toplu iş dosyasının adı ve konumu (yeniden yönlendirilecek dosyanın adı ve konumu ile birlikte mi?) Aksi takdirde örneği basitleştirmek güzel olurdu.
Joey

15
Hoş bir dokunuşla tl; dr
makoshichi

2
Hatta gecikmeli değişken kullanımı varsa, :: bazı hata mesajlarına neden olur, örneğin Belirtilen disk sürücüsünü bulamıyorum ..... O zaman daha iyi REM kullanın.
Scott Chu

2
:: yorumlar ayrıştırılır ve> | yorumu sonlandırırsanız aşağıdaki metin yorumlanmaz.
mosh

4
@mosh haklı. Örneğin, %VAR%değişkenler genişletilir. Varsayalım (yanlış) set TARGET=C:\Program Files (x86)\"foo.exe"ve bir DO(..)ifadenin içinde :: echo %TARGET%bir hata alırsınız çünkü tüm ifade değerlendirilmeden önce(x86) genişler , geçersiz bir ifadeye ve çok açıklanamaz hatalara yol açar (bu durumda "\ Microsoft şu anda beklenmedikti " ). Hatta gerek yok ya da ifadede. A gerçek bir yorum değil , ama. DO(..)|>::REM
Abel

161

REM ile yorumlar

A REM, ilk jetonun sonu değilse, tam bir çizgiyi, hatta satırın ucunda çok satırlı bir işareti belirtebilir.

REM This is a comment, the caret is ignored^
echo This line is printed

REM This_is_a_comment_the_caret_appends_the_next_line^
echo This line is part of the remark

REM ve ardından bazı karakterler .:\/=biraz farklı çalışır, ve işareti yorum yapmaz, böylece satır içi yorum olarak kullanabilirsiniz.

echo First & REM. This is a comment & echo second

Ancak mevcut gibi dosyaları ile sorunları önlemek için REM, REM.batya da REM;.batsadece modifiye varyant kullanılmalıdır.

REM^;<space>Comment

Ve karakter ;için de izin verilir;,:\/=

REM hakkındadır yavaş 6 kez daha ::(100000 comment çizgilerle Win7SP1 üzerinde test).
Normal bir kullanım için önemli değildir (yorum satırı başına 360µs yerine 58µs)

İle yorumlar ::

A ::her zaman bir satır sonu düzeltme işareti yürütür .

:: This is also a comment^
echo This line is also a comment

Etiketlerin ve yorum etiketinin :: parantez bloklarında özel bir mantığı vardır.
Her zaman iki satır SO içerir: goto komutu çalışmıyor .
Bu nedenle, sözdizimi hatalarına neden oldukları için parantez blokları için önerilmezler.

İle ECHO ONbir REMsatır gösterilir, ancak::

Her ikisi de satırın geri kalanını gerçekten yorumlayamaz, bu nedenle basit %~bir sözdizimi hatasına neden olur.

REM This comment will result in an error %~ ...

Ancak REM, özel karakter aşaması yapılmadan önce bile toplu iş ayrıştırıcısını erken bir aşamada durdurabilir.

@echo ON
REM This caret ^ is visible

Komut satırının sonuna yorum eklemek için & REM veya & :: tuşlarını kullanabilirsiniz . Bu yaklaşım işe yarar çünkü '&' aynı satıra yeni bir komut getirir.

Yüzde işaretleri olan yorumlar% = comment =%

Yüzde işaretleri olan bir yorum stili vardır.

Gerçekte bunlar değişkenlerdir ancak hiçbir şeye genişletilmezler.
Ancak avantaj, onlar olmadan bile aynı hatta yerleştirilebilmeleridir &.
Eşittir işareti, böyle bir değişkenin var olmamasını sağlar.

echo Mytest
set "var=3"     %= This is a comment in the same line=%

Makro tanımlandığında yorum kaldırılacağından, çalışma zamanı davranışlarını değiştirmediği için toplu iş makroları için yüzde stili önerilir.

set $test=(%\n%
%=Start of code=% ^
echo myMacro%\n%
)

2
Unutulmamalıdır %=yorumlar yani tırnak işaretleri titiz set foo=bar %=bazsonuçları fooiçin genişleyen bar %=bazyaptığı gibi, set foo="bar" %=bazsadece, oysa set "foo=bar" %=bazsonuçları fooiçin genişleyen baramaçlandığı gibi.
LastStar007

3
@ LastStar007: Her zaman tırnak stilini kullanmak set "foo=bar"genel olarak tavsiye edilmeye değer, çünkü değeri açıkça sınırlayan en sağlam formdur. Tarif ettiğiniz konu doğasında vardır set'ın davranış ve değil belirli %= … =%yorumlarla: Eğer kullanmadığınız sürece "var=val"alıntı, setaşağıda her şeyi gördüğü =varsa, hattın sonuna kadar (sonlarındaki boşluk veya dahil değeri, başlangıcını sonraki satır içi komut).
mklement0

28

Başka bir alternatif de yorumu her zaman boşluğa genişleyen değişken bir genişleme olarak ifade etmektir.

Değişken adları, ve =gibi belgelenmemiş dinamik değişkenler dışında içeremez . Hiçbir değişken ad , ilk konumdan sonra bir tane içeremez . Bu yüzden bazen parantez içindeki bir bloğa yorum eklemek için aşağıdakileri kullanıyorum:
%=ExitCode%%=C:%=

::This comment hack is not always safe within parentheses.
(
  %= This comment hack is always safe, even within parentheses =%
)

Aynı zamanda satır içi yorumları dahil etmek için iyi bir yöntemdir

dir junk >nul 2>&1 && %= If found =% echo found || %= else =% echo not found

Öncü =gerekli değil, ama simetri için hoşuma gidiyor.

İki kısıtlama vardır:

1) yorum içeremez %

2) yorum içeremez :


LOL! Büyük boyutlu bir değişken yapın! Genius! %=ExitCode%? Temiz. Her gün yeni bir şeyler öğrenin!
James K

İzin =gerekli olduğunu ima ediyorsunuz . Ama öyle görünmüyor.
James K

4
@JamesK - =% = ExitCode =% gibi bir şey dinamik bir değişken değil, bir "yorum" olacak şekilde sondaki kullanın . Her zaman çalışan bir stil kullanmayı tercih ederim (elbette cevabın altında belirtilen sınırlamalar hariç).
dbenham

Bkz stackoverflow.com/a/20169219/1689714 dinamik değişkenlerin bir keşif için (örneğin% = ExitCode%% = ExitCodeAscii%% = C:%% = D:%% __ CD __% vs.), ne anlama geldiklerini, nasıl hazır, vb ..
Kieron Hardy

25

Ben ::yorum yapmak ve kod yorum yapmak REMbana sadece çirkin görünüyordu etiketi kullanabileceğini fark ettikten sonra . Bahsedildiği gibi, çift kolon ()bloke kod içinde kullanıldığında sorunlara neden olabilir , ancak etiketler arasında geçiş yaparak bir çözüm buldum ::ve:space

:: This, of course, does
:: not cause errors.

(
  :: But
   : neither
  :: does
   : this.
)

Çirkin değil REMve aslında kodunuza biraz stil katıyor.

Bu yüzden kullandığım kod bloklarının dışında ::ve içinde ::ve arasında değişiyorum :.

Bu arada, toplu iş dosyanızın başlığında olduğu gibi büyük yorum parçaları için, yorumlarınızı gözden gotogeçirerek özel komutlardan ve karakterlerden tamamen kaçınabilirsiniz . Bu, herhangi bir yöntemi veya stil işaretlemesini kullanmanıza izin verir, ancak CMDbu çizgileri gerçekten işlemeye çalışırsa tıslama hissine rağmen.

@echo off
goto :TopOfCode

=======================================================================
COOLCODE.BAT

Useage:
  COOLCODE [/?] | [ [/a][/c:[##][a][b][c]] INPUTFILE OUTPUTFILE ]

Switches:
       /?    - This menu
       /a    - Some option
       /c:## - Where ## is which line number to begin the processing at.
         :a  - Some optional method of processing
         :b  - A third option for processing
         :c  - A forth option
  INPUTFILE  - The file to process.
  OUTPUTFILE - Store results here.

 Notes:
   Bla bla bla.

:TopOfCode
CODE
.
.
.

İstediğiniz gösterimi *, @vb. Kullanın .


/?Bu menüyü yazdırmak için düğmeyi nasıl kullanıyorsunuz ?
Hong Kong

1
@hoang setlocal ENABLEDELAYEDEXPANSION <NEWLINE> set var =% ~ 1 <NEWLINE> echo ilk parametresi% 1 <NEWLINE> EĞER! == "/?" (GOTO KULLANIMI) <NEWLINE>: KULLANIM <NEWLINE> echo blah blah .. <NEWLINE>
GL2014

16
Bir satır eklediğinizde veya sildiğinizde, alternatif tek ve çift sütunlar baş ağrısı olmalıdır.

GL2014 @ temelde "Söylediğin yok yazdırmak bu menüyü". Örnek kodunuzda, kullanım notlarının her satırına yankı önekinin eklenmesi gerekir. James K'ın yanıtı, kullanım notlarını yazılı olarak yazdırmanın bir yolu olduğunu düşündürdükçe yanıltıcıdır.
Timbo

1
@Timbo @hoang'ın istediğini :PrintHelpyapan bu cevap için bir altyordam ( ) yazdım . İşaretçi olarak <HELP> ve </HELP> kullanıyorum, ancak size uygun olanı kullanabilirsiniz.
cdlvcdlv

21

Bu cevap , bu sayfadaki birçok harika cevabın pragmatik bir özetini deniyor :

jeb'in büyük cevabı özel bir sözü hak ediyor, çünkü gerçekten derinlemesine gidiyor ve birçok kenar durumu kapsıyor.
Özellikle, yanlış yapılandırılmış bir değişken / parametre referansının , çizgiler dahil olmak üzere aşağıdaki çözümlerden herhangi birini %~kırabileceğine dikkat çekerREM .


Tüm satır yorumları - doğrudan desteklenen tek stil:


Eğer varsa do kullanıma istiyoruz:: , bu seçeneğin var:

  • Ya : Güvende olmak için, (...)blokların içinde bir istisna yapın ve REMorada kullanın ya da içine (...) tamamen yorum koymayın .
  • Veya : Aşağıdaki snippet'te özetlenen , ::içeride güvenli kullanım için acı verici kısıtlayıcı kuralları(...) ezberleyin :
@echo off

for %%i in ("dummy loop") do (

  :: This works: ONE comment line only, followed by a DIFFERENT, NONBLANK line.
  date /t

  REM If you followed a :: line directly with another one, the *2nd* one
  REM would generate a spurious "The system cannot find the drive specified."
  REM error message and potentially execute commands inside the comment.
  REM In the following - commented-out - example, file "out.txt" would be
  REM created (as an empty file), and the ECHO command would execute.
  REM   :: 1st line
  REM   :: 2nd line > out.txt & echo HERE

  REM NOTE: If :: were used in the 2 cases explained below, the FOR statement
  REM would *break altogether*, reporting:
  REM  1st case: "The syntax of the command is incorrect."
  REM  2nd case: ") was unexpected at this time."

  REM Because the next line is *blank*, :: would NOT work here.

  REM Because this is the *last line* in the block, :: would NOT work here.
)

Diğer yorum stillerinin öykünmesi - satır içi ve çok satırlı:

Not Bu tarzların hiçbiri doğrudan toplu dili tarafından desteklenen , ancak edilebilir taklit .


Satır içi yorumlar :

* Aşağıdaki kod parçacıkları ver, denemeyi kolaylaştırmak için rasgele bir komut için bir stand-in olarak kullanılır.
* SETKomutların satır içi yorumlarla doğru çalışmasını sağlamak için name=valueparçayı çift ​​tırnak içine alın ; ör SET "foo=bar". [1]

Bu bağlamda iki alt tipi ayırt edebiliriz:

  • Bir komuttan sonra yerleştirilebilen ve her zaman satırın sonuna kadar uzatılabilen EOL yorumları (satır sonu) (yine jeb cevabının izniyle ):

    • ver & REM <comment>Aslında yararlanır REMgeçerli bir komuttur ve &mevcut bir sonra ek bir komut yerleştirmek için kullanılabilir.
    • ver & :: <comment>çok işe yarıyor, ama gerçekten sadece (...)blokların dışında kullanılabilir , çünkü orada güvenli kullanımı ::bağımsız kullanmaktan daha sınırlı .
  • Bir satırdaki birden çok komut arasına veya ideal olarak belirli bir komutun içine yerleştirilen satır içi yorumlar .
    Satır içi yorumlar en esnek (tek satırlı) formdur ve tanım gereği EOL yorumları olarak da kullanılabilir.

    • ver & REM^. ^<comment^> & verkomutları arasına bir yorum eklemeye izin verir (yine, jeb cevabının izniyle ), ancak nasıl <ve kaçması >gerektiğini not edin ^, çünkü aşağıdaki< > | grafikler . : olduğu gibi kullanılamaz (tespit edilmeyen ise &ya da &&ya da ||başlangıç sonraki komutu).

    • %= <comment> =%, dbenham'ın büyük cevabında detaylandırıldığı gibi , en esnek formdur , çünkü bir komutun içine yerleştirilebilir (argümanlar arasında) .
      Bu şekilde değişken genişleme sözdizimi yararlanır olduğunu ifade her zaman genişler olmasını sağlar Boş dize - Yorum metnini da içermiyorsa uzun olduğunca %ne de:
      gibi REM, %= <comment> =%iyi dışını ve iç hem çalışır (...)bloklar, ama görsel olarak daha belirgin olduğu; tek alt tarafı, yazmanın daha zor olması, sözdiziminde yanlış anlaşılmanın daha kolay olması ve yaygın olarak bilinmemesi, tekniği kullanan kaynak kodunun anlaşılmasını engelleyebilmesidir.


Çok satırlı (tam satır blok) yorumlar :

  • James K'nin cevabı , keyfi uzunluk ve içerikle ilgili çok satırlı bir yorumu sınırlamak için bir gotoifadenin ve etiketin nasıl kullanılacağını gösterir (bu durumda kullanım bilgilerini saklamak için kullanır).

  • Zee'nin cevabı , çok satırlı bir yorum oluşturmak için "boş etiket" in nasıl kullanılacağını gösterir , ancak tüm iç hatların sonlandırılmasına özen gösterilmelidir ^.

  • Woude blog yayınını der Rob van size sağlayan başka biraz karanlık seçeneği bahseder sona satırlarını keyfi bir sayı ile bir dosyayı : Bir açılış (sadece göz ardı etmek sonra gelen her şeyi neden de başlarına içermiyor olarak, (non ^-scaped) ), yani blok kapalı olmadığı sürece .


[1] SET "foo=bar"Değişkenleri tanımlamak için kullanılması - yani, ad ve =ve birleştirilen değerin etrafına çift tırnak koymak - amaçlanan değişken değerini takipSET "foo=bar" & REM Set foo to bar. eden şeyin (bu durumda bir sonraki komuta kadar) olmasını sağlamak için komutlarda gereklidir. tek bir boşluk) yanlışlıkla onun bir parçası haline gelmez. (Bir kenara: sadece problemden kaçınmakla kalmaz, çift tırnakları değerin bir parçası haline getirir ). Bu sorunun, değerin ardından yanlışlıkla izleyen boşluklara özgü olduğunu ve hatta geçerli olduğunu unutmayın, bu nedenle her zaman yaklaşımı kullanmanız önerilir .
SET foo="bar"
SETSET "foo=bar"


7

Bu sayfa, "::" kullanmanın belirli kısıtlamalar altında daha hızlı olacağını söylüyor.


2
Bu, en azından Win7SP1 için, ::6 kat daha hızlı olabilirREM
jeb

4

iyi soru ... Uzun süredir bu işlevselliği de arıyordum ...

birkaç test ve püf noktasından sonra daha iyi çözüm daha açık olan gibi görünüyor ...

-> Ayrıştırıcı bütünlüğünün başarısız olmasını önleyerek bunu yapmanın en iyi yolu REM'i yeniden kullanmaktır:

echo this will show until the next REM &REM this will not show

ayrıca "NULL LABEL" hilesi ile çok satırlı kullanabilirsiniz ... (süreklilik için satırın sonundaki ^ unutma)

::(^
this is a multiline^
comment... inside a null label!^
dont forget the ^caret at the end-of-line^
to assure continuity of text^ 
)

3

James K, söylediğim şeyin adil bir bölümünde yanıldığım için üzgünüm. Yaptığım test şöyleydi:

@ECHO OFF
(
  :: But
   : neither
  :: does
   : this
  :: also.
)

Bu, alternatif açıklamanızı karşılıyor ancak ") şu anda beklenmedik bir şekilde başarısız oluyor." hata mesajı.

Bugün biraz daha test yaptım ve alternatifin anahtar olmadığını gördüm, ancak anahtarın çift sayıda kolonla (: :) başlayan ve çift kolonlarla bitmeyen bir satırda iki satır bulunmadığı anlaşılıyor. . Aşağıdakileri göz önünde bulundur:

@ECHO OFF
(
   : But
   : neither
   : does
   : this
   : cause
   : problems.
)

Bu çalışıyor!

Ancak şunu da düşünün:

@ECHO OFF
(
   : Test1
   : Test2
   : Test3
   : Test4
   : Test5
   ECHO.
)

Bir komutla sonlandığında çift sayıda yorum yapma kuralı geçerli görünmemektedir.

Ne yazık ki bu sadece sincapla kullanmak istediğimden emin değilim.

Gerçekten, en iyi çözüm ve aklıma gelen en güvenli olanı, Notepad ++ gibi bir programın REM'i çift sütun olarak okuyacağı ve daha sonra dosya kaydedildiğinde REM deyimleri olarak tekrar çift kolon yazacağıdır. Ama böyle bir programın farkında değilim ve Notepad ++ için de bunu yapan herhangi bir eklenti bilmiyorum.


2

Konu hakkında çok detaylı ve analitik bir tartışma BU sayfada bulunmaktadır

Örnek kodlar ve farklı seçeneklerin artıları / eksileri vardır.


1
Yanıtlarda verilen bağlantıların içeriğini özetlemelisiniz. Aksi takdirde buna "yalnızca bağlantı yanıtı" denir ve bağlantı kaybolursa tamamen işe yaramaz. Bu durumda, sayfa yavaş
mırıldanmalı

0

Bir toplu iş dosyasına yorum yapmanın birkaç yolu vardır

1) rem kullanma

Bu resmi yol. Görünüşe göre ::, carets işlenmeden önce erken ayrıştırmayı durdursa da, yürütülmesi daha uzun sürer . Yüzde genişletme rem'den önce gerçekleşir ve ::tanımlanır, bu nedenle yanlış yüzde kullanımı yani %~yüzdeler varsa hatalara neden olur. Kod bloklarında her yerde güvenle kullanılabilir.

2) etiketleri kullanılarak :, ::ya da :;vs.

İçin :: comment, ': comment' nedeniyle geçersiz etiket adıdır başlar geçersiz bir karakterle. Yine de bir etiketin ortasında iki nokta üst üste kullanmak iyidir. Bir uzay etiketin başlangıcında başlıyorsa, kaldırılır o : labelolur :label. Etiketin ortasında bir boşluk veya iki nokta üst üste işareti görünürse, adın geri kalanı yorumlanmaz; yani iki etiket varsa :f:oove :f rrher ikisi :fde dosya olarak yorumlanır ve yalnızca dosyada daha sonra tanımlanan etikete atlanır. Etiketin geri kalanı etkili bir yorumdur. Burada ::listelenen birden fazla alternatif var . Asla gotoya callda ::fooetiket yapamazsın . goto :foove goto ::fooçalışmaz.

Kod bloklarının dışında iyi çalışırlar, ancak kod bloğundaki bir etiketten sonra, geçersiz veya değil, geçerli bir komut satırı olmalıdır. :: commentaslında başka bir geçerli komuttur. Bunu bir etiket olarak değil, bir komut olarak yorumlar; komutun önceliği vardır. Hangi ::cildin cd komutudur, yürüttüyseniz çalışır subst :: C:\, aksi takdirde bir ses hatası bulamazsınız. Bu yüzden :;tartışmasız daha iyidir çünkü bu şekilde yorumlanamaz ve bu nedenle geçerli komut olarak işlev gören bir etiket olarak yorumlanır. Bu özyinelemeli değildir, yani bir sonraki etiketin bundan sonra bir komuta ihtiyacı yoktur. Bu yüzden ikişer ikişer geliyorlar.

Etiketin ardından geçerli bir komut vermeniz gerekir, örn echo something. Kod bloğundaki bir etiket en az bir geçerli komutla gelmelidir, bu nedenle satırlar ikişer ikişer ikişer gelir. Bir )sonraki satırda boşluk veya kapanış parantezi varsa beklenmedik bir hata alırsınız . İki ::satır arasında boşluk varsa geçersiz bir sözdizimi hatası alırsınız.

Yorumda şale operatörünü şu şekilde kullanabilirsiniz :::

@echo off

echo hello
(
   :;(^
   this^
   is^
   a^
   comment^
   )
   :;
)
   :;^
   this^
   is^
   a^
   comment
   :;
) 

Ancak :;, yukarıda belirtilen neden için izlemeye ihtiyacınız var .

@echo off

(
echo hello
:;
:; comment
:; comment
:;
)
echo hello

Çift bir sayı olduğu sürece iyidir. Bu şüphesiz yorum yapmanın en iyi yoludur - 4 satır ve :;. İle :;sen alamadım gereken herhangi hatalar kullanılarak bastırılması için 2> nulya subst :: C:\. subst :: C:\Birim bulunamadı hatasını gidermek için kullanabilirsiniz , ancak çalışma dizininizin oluşmasını önlemek için C: kodunu da koyacağınız anlamına gelir ::\.

Bir satırın sonuna yorum yapmak için şunları yapabilirsiniz: command &::veya command & rem commentyine de çift sayı olması gerekir, şöyle:

@echo off

(
echo hello & :;yes
echo hello & :;yes
:;
)

echo hello

Birincisi echo hello & :;yessonraki satırda geçerli bir komut var ama ikincisi & :;yesyok, bu yüzden bir tane gerekiyor :;.

3) Geçersiz bir ortam değişkeni kullanmak

%= comment =%. Bir toplu iş dosyasında, tanımlı olmayan ortam değişkenleri komut dosyasından kaldırılır. Bu, bunları bir çizginin sonunda kullanmadan kullanmayı mümkün kılar &. Eşittir işareti içeren geçersiz bir ortam değişkeni kullanmak özeldir. Ekstra eşitlik gerekli değildir ancak simetrik görünmesini sağlar. Ayrıca, "=" ile başlayan değişken adları belgelenmemiş dinamik değişkenler için ayrılmıştır. Bu dinamik değişkenler asla "=" ile bitmez, bu nedenle yorumun başında ve sonunda "=" kullanıldığında ad çakışması olasılığı yoktur. Yorum %veya içeremez :.

@echo off 
echo This is an example of an %= Inline Comment =% in the middle of a line.

4) Komut olarak stderr'ı nul'a yönlendirmek

@echo off
(
echo hello
;this is a comment 2> nul
;this is another comment  2> nul
)

5) Bir dosyanın sonunda, kapatılmamış bir parantezden sonraki her şey bir yorumdur

@echo off
(
echo hello
)

(this is a comment
this is a comment
this is a comment
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.