Saya punya pertanyaan tentang struktur if - else dalam file batch. Setiap perintah berjalan secara individual, tetapi saya tidak dapat menggunakan blok "if - else" dengan aman sehingga bagian dari program saya ini tidak berfungsi. Bagaimana saya bisa membuat bagian-bagian ini berjalan? Terima kasih.
IF %F%==1 IF %C%==1 (
::copying the file c to d
copy "%sourceFile%" "%destinationFile%"
)
ELSE IF %F%==1 IF %C%==0 (
::moving the file c to d
move "%sourceFile%" "%destinationFile%"
)
ELSE IF %F%==0 IF %C%==1 (
::copying a directory c from d, /s: boş olanlar hariç, /e:boş olanlar dahil
xcopy "%sourceCopyDirectory%" "%destinationCopyDirectory%" /s/e
)
ELSE IF %F%==0 IF %C%==0 (
::moving a directory
xcopy /E "%sourceMoveDirectory%" "%destinationMoveDirectory%"
rd /s /q "%sourceMoveDirectory%"
)
batch-file
if-statement
eponim
sumber
sumber
{}
tombol; ini membantu membuat postingan lebih mudah dibaca dan menghindari beberapa masalah dengan mark-up. Sebagai jawaban atas pertanyaan Anda, sekarang! Saat menulis pertanyaan, ada pratinjau di bawah ini sehingga Anda dapat melihat tampilannya setelah diposting.Jawaban:
Sintaks Anda salah. Anda tidak bisa menggunakan
ELSE IF
. Tampaknya Anda tidak terlalu membutuhkannya. Cukup gunakan beberapaIF
pernyataan:Referensi file batch yang bagus: http://ss64.com/nt/if.html
sumber
&&
dalam beberapaif
kondisi, lihat sintaks alternatif saya?IF condition1 IF condition 2
ELSE IF
? Ia bekerja dengan baik di bawah Win7. Lihat contoh: paste2.org/G8tMae92Menurut saya di pertanyaan dan di beberapa jawaban ada sedikit kebingungan tentang arti pseudocode ini di DOS: IF A IF BX ELSE Y. Bukan berarti IF (A dan B) THEN X ELSE Y, tapi di Fakta berarti IF A (IF B THEN X ELSE Y). Jika pengujian A gagal, maka seluruh inner if-else akan diabaikan.
Sebagai salah satu jawaban yang disebutkan, dalam hal ini hanya satu dari tes yang dapat berhasil sehingga 'lain' tidak diperlukan, tetapi tentu saja itu hanya berfungsi dalam contoh ini, ini bukan solusi umum untuk melakukan if-else.
Ada banyak cara untuk mengatasi ini. Berikut adalah beberapa ide, semuanya cukup jelek tapi hei, ini (atau setidaknya) DOS!
sumber
set
tidak membutuhkan tanda persen; harusset one=1
AFAIK Anda tidak bisa melakukan
if else
batch seperti yang Anda bisa dalam bahasa lain, itu harus bersarangif
.Menggunakan
if
kumpulan bersarang Anda akan terlihat sepertiatau seperti yang disarankan James, rangkai milik Anda
if
, namun menurut saya sintaks yang tepat adalahsumber
if else
, terutama dalam bahasa C-like juga hanya bersarangif
. Anda juga tidak harus menyarangkannya dengan blok dalam file batch.else if
kombo itu hanya bersarangif
tetapi saya tidak berpikir Anda dapat menggunakan kata kunci itu bersama-sama dalam batch seperti yang Anda bisa dalam bahasa C.Saya yakin Anda dapat menggunakan sesuatu seperti
sumber
do foo
dando bar
.IF (test) (command) ELSE IF (test) (command)
, Anda menyiratkanIF (test) (command) ELSE (IF (test) (command))
. Ini mungkin bekerja kadang-kadang, tetapi jika Anda yakin itu adalah struktur pemrograman aktual yang dapat diterima di DOS maka itu akan menjadi PITA untuk memecahkan masalah ketika gagal.Sedikit terlambat dan mungkin masih bagus untuk kondisi if yang kompleks, karena saya ingin menambahkan parameter "selesai" untuk mempertahankan struktur if-then-else:
sumber
IF...ELSE IF
konstruksi bekerja sangat baik dalam file batch, khususnya saat Anda hanya menggunakan satu ekspresi bersyarat di setiap baris IF:Dalam contoh Anda, Anda menggunakan
IF...AND...IF
tipe konstruksi, di mana 2 kondisi harus dipenuhi secara bersamaan. Dalam kasus ini, Anda masih dapat menggunakanIF...ELSE IF
konstruksi, tetapi dengan tambahan tanda kurung untuk menghindari ketidakpastian untuk kondisi ELSE berikutnya:Konstruksi di atas setara dengan:
Urutan pemrosesan perintah batch tergantung pada urutan penguraian CMD.exe . Pastikan saja konstruksi Anda mengikuti urutan logis itu, dan sebagai aturan, itu akan berhasil. Jika skrip batch Anda diproses oleh Cmd.exe tanpa kesalahan, itu berarti ini adalah konstruksi yang benar (yaitu didukung oleh versi OS Cmd.exe Anda), bahkan jika seseorang mengatakan sebaliknya.
sumber
Berikut contoh kode saya untuk if..else..if
yang melakukan hal berikut
Prompt pengguna untuk Nama Proses
Jika nama proses tidak valid
Kemudian tulis ke pengguna
jika nama proses adalah layanan
Kemudian tulis ke pengguna
jika nama proses valid dan bukan layanan,
maka tuliskan ke pengguna
yang proses telah dibunuh melalui
taskill
jadi saya menyebutnya Proses killer.bat
Inilah Kode saya:
sumber
inilah cara saya menangani jika lain jika situasi
Perhatikan bahwa ini tidak sama dengan blok if-elseif dengan bahasa pemrograman lain seperti C ++ atau Java tetapi akan melakukan apa yang perlu Anda lakukan
sumber