Batch: Tidak dapat menetapkan array ke variabel

Aug 30 2020

Saya tidak dapat menetapkan array ke variabel:

set persons[0].FirstName=Richard
set persons[0].lastName=DuponT
set persons[1].FirstName=Romain
set persons[1].lastName=DuponD


set x=0
REM Works:
call echo %%persons[0].FirstName%%      
call echo %%persons[%x%].FirstName%%
REM Fails:
SET var=%%persons[%x%]%%
echo %var.FirstName%

SET var=gagal, jadi gema berikut juga. Bagaimana cara menetapkan array ke variabel?

Jawaban

1 dbenham Aug 30 2020 at 21:10

Seperti yang dikatakan orang lain, batch tidak memiliki konsep formal array atau objek. Anda hanya mendefinisikan 4 variabel lingkungan yang namanya memberikan tampilan larik objek.

Nama variabel lingkungan dapat berisi karakter apa pun kecuali null (0x00) atau =. Nilai dapat berisi karakter apa pun kecuali null.

Anda dapat menyalin objek pseudo Anda dengan yang berikut:

set x=0
for /f "delims=. tokens=1*" %%A in ('set persons[%x%]') do set "obj.%%B
echo %obj.FirstName%

set persons[%x%]meluas ke set persons[0], yang pada gilirannya mencantumkan semua variabel lingkungan dengan nama yang dimulai dengan orang [0]. Itu akan menghasilkan keluaran sebagai berikut:

persons[0].FirstName=Richard
persons[0].lastName=DuponT

Perintah FOR / F dengan klausa IN () yang dikelilingi oleh tanda kutip tunggal mengiterasi keluaran dari perintah. Opsi DELIMS menentukan bahwa token dibatasi oleh .karakter, dan opsi TOKENS menentukan bahwa token pertama disimpan di %% A, dan semua konten yang tersisa disimpan di %% B.

Jadi untuk iterasi pertama, %% A = persons[0], dan %% B = FirstName=Richard. Jadi perintah SET menjadi set "obj.FirstName=Richard".

Jika Anda akan bekerja dengan struktur data yang kompleks dalam batch, maka Anda mungkin ingin membaca tentang ekspansi tertunda ( SETLOCAL EnableDelayedExpansiondigabungkan dengan !var!alih - alih %var%), aturan batch quoting dan escape, dan penggunaan CALLdengan persentase dua kali lipat untuk mendapatkan tambahan putaran ekspansi variabel (Anda sudah menggunakan ini tanpa memahami cara kerjanya). Itu hanya puncak gunung es. Ada banyak sekali pengetahuan misterius yang dibutuhkan untuk sepenuhnya memahami bagaimana segala sesuatu bekerja.

Jika Anda benar-benar ingin melihat lubang kelinci itu, lihat Bagaimana Windows Command Interpreter (CMD.EXE) mengurai skrip? .