Xác định và sử dụng một biến trong tệp bó


450

Tôi đang cố gắng xác định và sử dụng một biến trong một tệp bó. Có vẻ như nó phải đơn giản:

@echo off

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

Đầu ra tôi nhận được là như sau:

We're working with ""

Những gì đang xảy ra ở đây? Tại sao biến của tôi không bị dội lại?

Câu trả lời:


552

Khoảng trắng trước dấu =được hiểu là một phần của tên và khoảng trắng sau nó (cũng như dấu ngoặc kép) được hiểu là một phần của giá trị. Vì vậy, biến bạn đã tạo có thể được tham chiếu với %location %. Nếu đó không phải là điều bạn muốn, hãy xóa (các) không gian thừa trong định nghĩa.


7
Nếu khoảng trắng trước =được hiểu là một phần của tên thì biến không thể được tham chiếu là %location%, nó phải được tham chiếu là %location %. Đó có phải là một lỗi đánh máy?
Biến khốn khổ

7
@Miserable Biến: Bạn đúng; có vẻ như câu trả lời ban đầu đã trở thành nạn nhân của một chỉnh sửa không chính xác.
Brian Nixon

18
Vì vậy, đây là những gì MS đi kèm
Falaque

5
@Falaque Trái ngược với alias x = yở * đất nix?
Cơ bản

1
@Falaque vậy bạn nghĩ bash sẽ làm gì khi chạy x = y?
phuclv

263

Các không gian là đáng kể. Bạn đã tạo một biến có tên 'location ' với giá trị là
' "bob"'. Lưu ý - kèm theo dấu ngoặc đơn đã được thêm vào để hiển thị vị trí của không gian.

Nếu bạn muốn báo giá trong giá trị của bạn, thì mã của bạn sẽ giống như

set location="bob"

Nếu bạn không muốn báo giá, thì mã của bạn sẽ giống như

set location=bob

Hoặc tốt hơn

set "location=bob"

Cú pháp cuối cùng ngăn không gian dấu vô ý đi vào giá trị, và cũng bảo vệ chống lại các ký tự đặc biệt như, & |v.v.


8
Có bất kỳ nhược điểm cho cú pháp cuối cùng?
Sói

8
@Wolf - Không, không có nhược điểm. Tuy nhiên, có một giới hạn khi nó hiệu quả nhất. Miễn là giá trị không chứa dấu ngoặc kép, thì hầu như bất kỳ ký tự nào cũng có thể xuất hiện trong giá trị mà không lo lắng về việc thoát. Các ngoại lệ là %, và có thể !nếu mở rộng chậm được kích hoạt. Nhưng nếu giá trị có chứa dấu ngoặc kép, sau đó bạn phải lo lắng về việc khi nào thoát khỏi nhân vật độc như |, &vv
dbenham

1
điều này có vẻ giống như thiết lập biến môi trường trong các cửa sổ. Đây có phải là cách duy nhất để sử dụng biến cục bộ trong tập lệnh bó?
ký sinh

1
@Wolf, bạn chỉ phải đảm bảo rằng các phần mở rộng lệnh được bật, nhưng dù sao đây cũng là cấu hình mặc định ...
aschipfl

7

đầu vào location.bat

@echo off
cls

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

đầu ra

We're working with bob

(sai lầm bạn đã làm: space" ")


4
set /pnhắc người dùng và lưu câu trả lời trong biến đã chỉ định. ví dụ:set /p name="What is your name? " & echo Hello, %name%.
Robert Mooney

6
-1, Cú pháp set /p "varname"="text"sai, nó tạo ra một biến có tên location"(với một trích dẫn!). Nó phải set /p location="bob". Nhưng ngay cả sau đó, nó không còn phù hợp với câu hỏi nữa
jeb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.