Bagaimana cara "memberi komentar" (tambahkan komentar) dalam batch / cmd?

883

Saya memiliki file batch yang menjalankan beberapa skrip python yang melakukan modifikasi tabel.

  1. Saya ingin pengguna berkomentar skrip python 1-2 yang mereka tidak ingin jalankan, daripada menghapusnya dari file batch (sehingga pengguna berikutnya tahu skrip ini ada sebagai opsi!)

  2. Saya juga ingin menambahkan komentar untuk menarik perhatian mereka khususnya variabel yang mereka butuhkan untuk memperbarui dalam file Batch sebelum mereka menjalankannya. Saya melihat bahwa saya dapat menggunakan REM. Tapi sepertinya itu lebih untuk memperbarui pengguna dengan kemajuan setelah mereka menjalankannya.

Apakah ada sintaks untuk menambahkan komentar dengan lebih tepat?

pengguna1397044
sumber
6
Lihat juga jawaban yang sangat baik di sini stackoverflow.com/q/12407800/1011025
ndemou
2
Anda dapat Menggunakan Rem SthPerintah Atau Gunakan Tanda Ini::: Sth
scientist_7

Jawaban:

881

The remPerintah memang untuk komentar. Itu tidak secara inheren memperbarui siapa pun setelah menjalankan skrip. Beberapa penulis skrip mungkin menggunakannya seperti itu alih-alih echo, karena, secara default, penerjemah kumpulan akan mencetak setiap perintah sebelum diproses. Karena remperintah tidak melakukan apa-apa, aman untuk mencetaknya tanpa efek samping. Untuk menghindari pencetakan perintah, awali dengan @, atau, untuk menerapkan pengaturan itu di seluruh program, jalankan @echo off. (Ini echo offuntuk menghindari pencetakan perintah lebih lanjut, yang @adalah untuk menghindari pencetakan yang perintah sebelum gema pengaturan mengambil efek.)

Jadi, dalam file batch Anda, Anda dapat menggunakan ini:

@echo off
REM To skip the following Python commands, put "REM" before them:
python foo.py
python bar.py
Rob Kennedy
sumber
405
Anda juga dapat menggunakan dua titik dua "::". Ini adalah salah satu dari dua cara menambahkan komentar ke file batch tanpa menampilkan atau mengeksekusi baris itu ketika file batch dijalankan. Tidak seperti REM, baris ini tidak akan ditampilkan terlepas jika ECHO yang tidak aktif ada di file batch.
Brent81
12
@ Brent81 Saya merasa ini harus menjadi jawaban yang benar. Saat menggunakan sintaks yang menyoroti perintah REM sebenarnya tidak menyorot teks sebagai "berkomentar".
Otomatis
17
Tanda titik dua adalah "label tidak valid"; inilah artikel yang menjelaskannya, dan mengapa kinerjanya mungkin lebih baik daripada REM (terutama pada floppy disk!), dan itu tidak akan berfungsi di blok kode indentasi (hanya pada karakter pertama): robvanderwoude.com/comments.php
Michael Paulukonis
4
Menarik. Saya pikir REM adalah 'komentar seluruh baris' dan usus besar ganda adalah 'komentar sebaris', sepertiREM This whole line is a comment @echo off :: This comment is inline
Richard Smith
@Alhadis, skrip Konfigurasi Perl ditulis dalam Bourne shell, bukan batch Windows, jadi bagaimana relevansinya di sini? Selain itu, perintah titik dua yang berlaku sintaks Bourne bukan "efek samping bonus"; itulah sebabnya ia digunakan dalam naskah Bourne itu . Ini digunakan untuk mendukung #komentar karena #, jelas, mungkin bukan perancang komentar yang valid di semua shell Configure dimaksudkan untuk mendukung; lihat baris 3.
Rob Kennedy
956

Gunakan ::atauREM

::   commenttttttttttt
REM  commenttttttttttt

TAPI (seperti yang dicatat orang):

  • Jika Anda menggunakan inline, Anda perlu menambahkan &karakter:
    your commands here & :: commenttttttttttt
  • Di dalam logika bersarang ( IF/ELSE, FORloop, dll ...) digunakan REMkarena ::memberikan kesalahan.
  • :: mungkin gagal dalam setlocal ENABLEDELAYEDEXPANSION
T.Todua
sumber
79
Tanda titik dua :: Adalah komentar .bat terbersih yang ada. Dan itu dapat digunakan di awal atau tengah garis!
ATSiem
10
Tidak berfungsi untuk saya ketika dilakukan inline seperti ini. cd "C:\Folder" ::this throws a syntax error
Shaun Rowan
3
Juga gagal git add :: blah this is not a commentdengan "fatal: pathspec 'blah' tidak cocok dengan file apa pun"
Bob Stein
19
Untuk komentar pada baris yang sama dengan contoh diilustrasikan, Anda perlu menambahkan &antara kode dan komentar ::. Sebagai ilustrasi, buka cmd prompt dan jalankan dir ::blahyang tidak mencantumkan konten .dan bandingkan dengan dir & ::blah, yang tidak
Rado
19
Peringatan, menggunakan ::skrip wasiat akan dengan setlocal ENABLEDELAYEDEXPANSIONdanfor
Azevedo
50

Tidak, file batch lama biasa digunakan REMsebagai komentar. ECHOadalah perintah yang mencetak sesuatu di layar.

Untuk "mengomentari" bagian file yang dapat Anda gunakan GOTO. Contoh dari semua perintah / teknik ini:

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

Apa yang bisa kukatakan? file batch adalah peninggalan yang sudah lama berlalu, mereka kikuk dan jelek.

Anda dapat membaca lebih lanjut di situs web ini .

EDIT: memodifikasi contoh sedikit agar mengandung elemen yang Anda cari.

fvu
sumber
31

The :: bukannya REM lebih disukai digunakan pada zaman komputer tidak terlalu cepat. Baris REM'ed dibaca dan kemudian dimurnikan. :: ed line diabaikan sepanjang jalan. Ini dapat mempercepat kode Anda di "masa lalu". Lebih jauh lagi setelah REM Anda membutuhkan ruang, setelah :: Anda tidak.

Dan seperti yang dikatakan dalam komentar pertama: Anda dapat menambahkan info ke baris apa pun yang menurut Anda perlu

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

Sedangkan untuk melewatkan bagian. Menempatkan REM di depan setiap baris bisa agak memakan waktu. Seperti disebutkan menggunakan GOTO untuk melewati bagian adalah cara mudah untuk melewati potongan kode besar. Pastikan untuk mengatur: LABEL pada titik yang Anda inginkan kode untuk melanjutkan.

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
Kees
sumber
1
Bagaimana garis ganda-usus besar dapat diabaikan tanpa dibaca? Bukankah penerjemah harus terlebih dahulu membaca baris sebelum mengenalinya sebagai garis dobel?
Rob Kennedy
2
@RobKennedy ketika saya membaca jawabannya, itu tidak membaca apa pun setelah ::, di mana semuanya setelah REM dibaca.
James Jenkins
5
Jika interpreter perintah berhenti membaca , @James, maka itu tidak akan pernah mengeksekusi file lagi. Jelas perlu melanjutkan membaca untuk menemukan di mana komentar berakhir dan di mana baris berikutnya dari file dimulai. Itu harus dilakukan dengan ::dan remsama.
Rob Kennedy
2
@RobKennedy, saya juga berpikir itu tersirat bahwa itu hanya diterapkan pada baris perintah itu aktif.
James Jenkins
7
@RobKennedy tidak membaca tetapi tidak mem - parsing (atau memproses) apa yang dibacanya, hanya melompat sampai berikutnya \ndan kemudian mulai mem- parsing lagi [rujukan?]
xDaizu
25

Komentar multi baris

Jika ada banyak baris yang ingin Anda komentari maka akan lebih baik jika Anda bisa membuat komentar multi-baris daripada mengomentari setiap baris.

Lihat posting ini oleh Rob van der Woude di blok komentar :

Bahasa kumpulan tidak memiliki blok komentar, meskipun ada cara untuk mencapai efeknya.

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

Anda dapat menggunakan GOTOLabel dan: Label untuk membuat komentar blokir.

Atau, Jika blok komentar muncul di akhir file batch, Anda dapat menulis EXITdi akhir kode dan kemudian sejumlah komentar untuk pengertian Anda.

@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...
Somnath Muluk
sumber
ini sering digunakan dalam skrip batch campuran & VBS / JS, meskipun mereka digunakan jika ifalih-alih goto stackoverflow.com/q/9074476/995714 ss64.com/vb/syntax-hybrid.html stackoverflow.com/a/34512715/995714
phuclv
13

Menempatkan komentar di baris yang sama dengan perintah: gunakan & :: comment

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

Penjelasan:

&memisahkan dua perintah , jadi dalam hal ini color Cadalah perintah pertama dan :: set red font coloryang kedua.


Penting:

Pernyataan dengan komentar ini terlihat benar secara intuitif:

goto error1         :: handling the error

tetapi itu bukan penggunaan komentar yang valid . Ini hanya berfungsi karena gotomengabaikan semua argumen yang melewati argumen pertama. Buktinya mudah, ini gotojuga tidak akan gagal:

goto error1 handling the error

Namun upaya serupa

color 17            :: grey on blue

gagal mengeksekusi perintah karena 4 argumen yang tidak diketahui dengan colorperintah: ::, grey, on, blue.

Ini hanya akan berfungsi sebagai:

color 17     &      :: grey on blue

Jadi ampersand tidak bisa dihindari.

miroxlav
sumber
Dari jawaban lain, sepertinya ampersand tidak diperlukan?
RoG
3
@Snaptastic - Jawaban lain sebenarnya salah dalam poin ini, lihat edit terakhir saya.
miroxlav
Ini sepertinya cara yang benar; Bahkan disorot sebagai komentar di IDE saya.
baburao
5

Anda dapat berkomentar sesuatu menggunakan ::atau REM:

your commands here
:: commenttttttttttt

atau

your commands here
REM  commenttttttttttt

 

Untuk melakukannya di baris yang sama dengan perintah, Anda harus menambahkan tanda dan:

your commands here      & ::  commenttttttttttt

atau

your commands here      & REM  commenttttttttttt

 

catatan:

  • Menggunakan :: logika bersarang ( IF-ELSE, FORloop, dll ...) akan menyebabkan kesalahan. Dalam kasus tersebut, gunakan REMsaja.
Pikamander2
sumber
Ini berdasarkan jawaban T.Todua. Saya merasa bahwa jawaban mereka baik tetapi mengabaikan beberapa detail penting, tetapi mereka memutar kembali edit saya, jadi saya mengubah revisi saya menjadi jawaban sendiri.
Pikamander2
Pikamander2, revisi Anda (juga, ditunjukkan oleh pengguna @Rado digabungkan dalam jawaban saat itu dan terima kasih untuk itu, hanya saja saya lebih suka gaya lain untuk jawaban dan menggunakan gaya yang berbeda.
T.Todua
1

Ini adalah topik lama dan saya ingin menambahkan pemahaman saya di sini untuk memperluas pengetahuan tentang topik yang menarik ini.

Perbedaan utama antara REM dan :: adalah:

REM adalah perintah itu sendiri, sementara :: TIDAK.

Kita dapat memperlakukan :: sebagai token yang segera setelah CMD parser menemukan ruang kosong di sebuah baris adalah :: token ini, ia hanya akan melewatkan seluruh baris dan membaca baris berikutnya. Itu sebabnya REM harus diikuti oleh setidaknya ruang kosong untuk dapat berfungsi sebagai komentar untuk saluran, sementara :: tidak memerlukan ruang kosong di belakangnya.

Bahwa REM adalah perintah itu sendiri dapat paling baik dipahami dari sintaks FOR berikut

Sintaks dasar FOR adalah sebagai berikut

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

di sini <Command>dapat berupa perintah yang valid. Jadi kita dapat menulis baris perintah yang valid seperti remperintah

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

Namun, kami TIDAK BISA menulis baris berikut karena ::bukan perintah

FOR %i in (1,2,3) DO :: echo %i
jyao
sumber
3
secara teknis, ::adalah label (tidak valid) (yang menjelaskan perilakunya) dan karenanya tidak boleh digunakan (walaupun masih cukup umum)
Stephan
1

Anda dapat menambahkan komentar di akhir file batch dengan sintaks ini:

@echo off
:: Start of code
...
:: End of code

(I am a comment
So I am!
This can be only at the end of batch files

Pastikan Anda tidak pernah menggunakan tanda kurung penutup.

Atribusi: Leo Guttirez Ramirez di https://www.robvanderwoude.com/comments.php

Wasif Hasan
sumber