Mendefinisikan dan menggunakan variabel dalam file batch

450

Saya mencoba mendefinisikan dan menggunakan variabel dalam file batch. Sepertinya harus sederhana:

@echo off

set location = "bob"
echo We're working with "%location%"

Output yang saya dapatkan adalah sebagai berikut:

We're working with ""

Apa yang terjadi di sini? Mengapa variabel saya tidak digaungkan?

Jamie Dixon
sumber

Jawaban:

552

Ruang sebelum =ditafsirkan sebagai bagian dari nama, dan ruang setelah itu (serta tanda kutip) ditafsirkan sebagai bagian dari nilai. Jadi variabel yang Anda buat dapat dirujuk %location %. Jika bukan itu yang Anda inginkan, hapus ruang ekstra di definisi.

Brian Nixon
sumber
7
Jika spasi sebelum =ditafsirkan sebagai bagian dari nama maka variabel tidak dapat dirujuk sebagai %location%, itu harus dirujuk sebagai %location %. Apakah itu salah cetak?
Variabel sengsara
7
@ Variabel Bermanfaat: Anda benar; sepertinya jawaban asli menjadi korban pengeditan yang salah.
Brian Nixon
18
Jadi inilah yang datang dengan MS
Falaque
5
@Falaque Berbeda dengan alias x = ydi * nix land?
Dasar
1
@Falaque, jadi menurut Anda apa yang akan dilakukan bash saat berlari x = y?
phuclv
263

Ruang-ruangnya signifikan. Anda membuat variabel bernama 'location ' dengan nilai
' "bob"'. Catatan - melampirkan tanda kutip tunggal ditambahkan untuk menunjukkan lokasi ruang.

Jika Anda ingin mengutip dalam nilai Anda, maka kode Anda akan terlihat seperti

set location="bob"

Jika Anda tidak ingin mengutip, maka kode Anda akan terlihat seperti

set location=bob

Atau lebih baik lagi

set "location=bob"

Sintaks terakhir mencegah spasi tambahan yang tidak disengaja dari mendapatkan nilai, dan juga melindungi terhadap karakter khusus seperti & |dll.

dbenham
sumber
8
Apakah ada kerugian untuk sintaks terakhir?
Wolf
8
@ Serigala - Tidak, tidak ada downside. Namun, ada batas kapan itu paling efektif. Selama nilainya tidak mengandung tanda kutip, maka hampir semua karakter dapat muncul dalam nilai tanpa khawatir akan melarikan diri. Pengecualiannya adalah %, dan mungkin !jika ekspansi yang tertunda diaktifkan. Tetapi jika nilai tidak berisi tanda kutip, maka Anda harus khawatir tentang kapan untuk melarikan diri karakter racun seperti |, &, dll
dbenham
1
ini tampaknya sama dengan pengaturan variabel lingkungan di windows. Apakah ini satu-satunya cara menggunakan variabel lokal dalam skrip batch?
parasrish
1
@ Serigala, Anda hanya perlu memastikan bahwa ekstensi perintah diaktifkan, tetapi ini adalah konfigurasi default ...
aschipfl
7

memasukkan location.bat

@echo off
cls

set /p "location"="bob"
echo We're working with %location%
pause

keluaran

We're working with bob

(kesalahan yang Anda lakukan: spacedan " ")

Philip
sumber
4
set /pmeminta pengguna dan menyimpan jawaban dalam variabel yang ditentukan. misalnya,set /p name="What is your name? " & echo Hello, %name%.
Robert Mooney
6
-1, Sintaksnya set /p "varname"="text"salah, itu menciptakan variabel bernama location"(dengan kutipan trailing!). Seharusnya begitu set /p location="bob". Tetapi bahkan kemudian, itu tidak cocok dengan pertanyaan lagi
jeb