Giả sử tôi thực thi những điều sau trong CMD shell:
set FOO=bar
Có cách nào để hủy xác định biến này, ngoài việc tái chế CMD shell không?
Giả sử tôi thực thi những điều sau trong CMD shell:
set FOO=bar
Có cách nào để hủy xác định biến này, ngoài việc tái chế CMD shell không?
set var=
câu trả lời của bạn hoạt động trong MS-DOS 6.22 command.com giống như nó hoạt động trong Windows cmd.exe. (Tuy nhiên, không giống như Windows, đặt dấu ngoặc kép quanh var = không làm việc, thay vào đó nó sẽ tạo ra một biến môi trường có tên bắt đầu với một dấu nháy kép.)
Câu trả lời:
Có, bạn có thể hủy đặt nó bằng
set FOO=
Hoặc sử dụng rõ ràng:
set "FOO="
Đảm bảo không có ký tự không liên quan (ẩn) ở sau =
dấu hiệu. Đó là:
set FOO=
khác với set FOO=
.Điều này phù hợp với tôi trong trình bao Windows 7 CMD của tôi:
set FOO=bar
echo %FOO% // bar
set FOO=
echo %FOO% // empty; calling "set" no longer lists it
set
lệnh. Nếu bạn thử set FOO = bar
và sau đó thử set FOO=
, nó sẽ không bỏ đặt 'FOO'. Tuy nhiên, vì một số lý do, chúng không (như?) Đáng kể bên trong % %
.
Tôi chỉ đưa ra những điều sau đây như một nhận xét, nhưng tôi nghĩ nó đủ quan trọng để tự đứng vững.
Rất nhiều câu trả lời trước đây đã đề cập rằng người ta cần phải cẩn thận với dấu cách ở cuối; và chắc chắn đó là sự thật. Tuy nhiên, tôi nhận thấy rằng đôi khi các dấu cách ở cuối chỉ muốn đi vào đó bất kể điều gì - đặc biệt nếu bạn đang thực hiện dòng lệnh một dòng và cần khoảng trắng làm dấu phân cách lệnh.
Đây là giải pháp cho vấn đề đó:
SET FOO=Bar
echo %FOO%
:: outputs Bar
SET "FOO="
echo %FOO%
:: outputs %FOO%
Bằng cách gói khai báo trong dấu ngoặc kép theo cách đó, vấn đề khoảng cách có thể được tránh hoàn toàn. Điều này cũng có thể thực sự hữu ích khi các biến được tạo bằng cách nối để loại bỏ khoảng trắng ở giữa - ví dụ - các đường dẫn, ví dụ:
SET A=c:\users\ && SET D=Daniel
SET P="%a%%d%"
ECHO %P%
:: outputs "C:\Users\ Daniel"
:: Notice the undesirable space there
cmd.exe
) ??