Ada beberapa cara untuk menjalankan perintah yang berbeda pada bashdan cmddengan skrip yang sama.
cmdakan mengabaikan baris yang dimulai dengan :;, seperti yang disebutkan dalam jawaban lain. Ini juga akan mengabaikan baris berikutnya jika baris saat ini diakhiri dengan perintah rem ^, karena ^karakter akan keluar dari jeda baris dan baris berikutnya akan diperlakukan sebagai komentar olehrem .
Sedangkan untuk membuat garis bashabaikan cmd, ada beberapa cara. Saya telah menyebutkan beberapa cara untuk melakukannya tanpa melanggar cmdperintah:
#Perintah tidak ada (tidak disarankan)
Jika tidak ada #perintah yang tersedia cmdsaat skrip dijalankan, kita dapat melakukan ini:
# 2>nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
The #karakter pada awal cmdmerek garis bashmemperlakukan bahwa garis sebagai komentar.
The #karakter pada akhir bashbaris digunakan untuk komentar pada \rkarakter, seperti Brian Tompsett tunjukkan dalam jawabannya . Tanpa ini, bashakan memunculkan kesalahan jika file memiliki \r\nakhiran baris, diperlukan olehcmd .
Dengan melakukan # 2>nul, kami menipu cmduntuk mengabaikan kesalahan dari beberapa #perintah yang tidak ada , sambil tetap menjalankan perintah yang mengikuti.
Jangan gunakan solusi ini jika ada #perintah yang tersedia di PATHatau jika Anda tidak memiliki kendali atas perintah yang tersedia untuk cmd.
Menggunakan echountuk mengabaikan #karakter dicmd
Kita dapat menggunakan echodengan keluarannya yang diarahkan untuk memasukkan cmdperintah di basharea yang dikomentari:
echo >/dev/null # >nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
Karena #karakter tidak memiliki arti khusus cmd, itu diperlakukan sebagai bagian dari teks ke echo. Yang harus kita lakukan adalah mengarahkan output dari echoperintah dan memasukkan perintah lain setelahnya.
#.batFile kosong
echo >/dev/null # 1>nul 2> #.bat
# & echo Hello cmd! & del #.bat & rem ^
echo 'Hello bash!' #
The echo >/dev/null # 1>nul 2> #.batgaris menciptakan kosong #.batberkas sementara di cmd(atau mengganti yang sudah ada #.bat, jika ada), dan tidak apa-apa saat bash.
File ini akan digunakan oleh cmdbaris berikutnya meskipun ada beberapa #perintah lain di PATH.
The del #.batperintah pada cmdkode -specific menghapus file yang telah dibuat. Anda hanya perlu melakukan ini di cmdbaris terakhir .
Jangan gunakan solusi ini jika #.batfile mungkin ada di direktori kerja Anda saat ini, karena file itu akan dihapus.
Direkomendasikan: menggunakan here-document untuk mengabaikan cmdperintah dibash
:; echo 'Hello bash!';<<:
echo Hello cmd! & ^
:
Dengan menempatkan ^karakter di akhir cmdbaris, kita keluar dari baris baru, dan dengan menggunakan :sebagai pemisah dokumen di sini, konten baris pembatas tidak akan berpengaruh cmd. Dengan begitu, cmdhanya akan mengeksekusi barisnya setelah :baris berakhir, memiliki perilaku yang sama seperti bash.
Jika Anda ingin memiliki banyak baris di kedua platform dan hanya mengeksekusinya di akhir blok, Anda dapat melakukan ini:
:;( #
:; echo 'Hello' #
:; echo 'bash!' #
:; );<<'here-document delimiter'
(
echo Hello
echo cmd!
) & rem ^
here-document delimiter
Selama tidak ada cmdgaris yang tepat here-document delimiter, solusi ini akan berhasil. Anda dapat mengubah here-document delimiterke teks lain.
Di semua solusi yang disajikan, perintah hanya akan dijalankan setelah baris terakhir , membuat perilakunya konsisten jika melakukan hal yang sama di kedua platform.
Solusi tersebut harus disimpan ke file dengan \r\njeda baris, jika tidak, solusi tersebut tidak akan berfungsi cmd.