Toplu iş dosyasında değişken tanımlama ve kullanma


450

Tanımlamak ve bir toplu iş dosyasında bir değişken kullanmaya çalışıyorum. Basit olmalı gibi görünüyor:

@echo off

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

Aldığım çıktı aşağıdaki gibidir:

We're working with ""

Burada neler oluyor? Değişkenim neden yankılanmıyor?

Yanıtlar:


552

Tarihinden önceki boşluk =, adın bir parçası olarak yorumlanır ve sonraki boşluk (ve tırnak işaretleri) değerin bir parçası olarak yorumlanır. Böylece oluşturduğunuz değişkene başvurulabilir %location %. İstediğiniz bu değilse, tanımdaki fazladan boşlukları kaldırın.


7
Uzay önce olursa =o zaman değişken adının bir parçası olarak yorumlanır olamaz şeklinde referansta bulunmak %location%, bu ifade edecek olması vardır %location %. Bu bir yazım hatası mı?
Sefil Değişken

7
@Miserable Değişken: Haklısın; orijinal cevap yanlış bir düzenlemenin kurbanı gibi görünüyor.
Brian Nixon

18
MS'in birlikte geldiği şey bu
Falaque

5
@Falaque alias x = y* nix ülkesinin aksine ?
Temel

1
@Falaque peki sizce bash çalışırken ne yapacak x = y?
phuclv

263

Alanlar önemlidir. Sen adında bir değişken oluşturulan 'location ' değerine sahip
' "bob"'. Not - alanın yerini göstermek için tek tırnak işaretleri eklenmiştir.

Değerinizde alıntı yapmak istiyorsanız, kodunuz aşağıdaki gibi görünmelidir

set location="bob"

Alıntı istemiyorsanız, kodunuz aşağıdaki gibi görünmelidir

set location=bob

Veya daha iyisi

set "location=bob"

Son sözdizimi, yanlışlıkla izleyen boşlukların değere girmesini önler ve ayrıca & |vb. Gibi özel karakterlere karşı korur .


8
Son sözdizimi için herhangi bir olumsuzluk var mı?
Wolf

8
@Wolf - Hayır, hiçbir dezavantajı yok. Bununla birlikte, en etkili olduğu zaman için bir sınır vardır. Değer tırnak işareti içermediği sürece, değerden kaçma endişesi olmadan neredeyse tüm karakterler görünebilir. İstisnalar %ve büyük olasılıkla !gecikmeli genişletme etkinse. Değeri tırnak içermiyor Ama eğer, o zaman bir tür zehirdir karakterlerden kurtulmak için zaman dert gerekir |, &vs
dbenham

1
bu, Windows'ta ortam değişkenini ayarlamakla aynı görünüyor. Toplu komut dosyalarında yerel değişkenleri kullanmanın tek yolu bu mu?
parasrish

1
@Wolf, yalnızca komut uzantılarının etkinleştirildiğinden emin olmanız gerekir , ancak bu yine de varsayılan yapılandırmadır ...
aschipfl

7

giriş location.bat

@echo off
cls

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

çıktı

We're working with bob

(yaptığınız hatalar: spaceve " ")


4
set /pkullanıcıya bilgi verir ve cevabı belirtilen değişkene kaydeder. ör.,set /p name="What is your name? " & echo Hello, %name%.
Robert Mooney

6
-1, Sözdizimi set /p "varname"="text"yanlış, adlı bir değişken oluşturur location"(sondaki alıntı ile!). Olmalı set /p location="bob". Ama o zaman bile, artık
soruyla eşleşmiyor
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.