Làm cách nào để xóa tất cả các biến môi trường khỏi phiên shell Windows?


12

Nếu tôi bắt đầu một phiên bản Windows shell mới và gõ:

env

Tôi thấy rất nhiều biến môi trường được thiết lập. Tôi muốn gỡ lỗi việc chạy chương trình dòng lệnh bằng cách loại bỏ tất cả các biến môi trường khỏi phiên shell hiện tại.

Tôi có thể đi từng người một với cách tiếp cận sau:

SET FOO=
SET BAR=
SET ... ... ...

Tuy nhiên, có một cách đơn giản để xóa tất cả chúng trong một lần?


1
envgì Tôi chưa bao giờ nghe về điều đó trước đây và nó không hoạt động ở đây.
paradroid

Câu trả lời:


13

Bạn có thể viết điều này trong một tệp bó:

@echo off
if exist ".\backupenv.bat" del ".\backupenv.bat"
for /f "tokens=1* delims==" %%a in ('set') do (
echo set %%a=%%b>> .\backupenv.bat
set %%a=
)

Về cơ bản, nó chạy qua từng biến môi trường, sao lưu chúng vào một tệp bó ( backupenv.bat) và sau đó xóa từng biến. Để khôi phục chúng, bạn có thể chạy backupenv.battệp.


Điều đó thật tuyệt. Cảm ơn! Một điều nhỏ: tệp backupenv.bat dường như có 2 dấu cách ở cuối mỗi dòng SET A = B. Điều này dường như làm hỏng một số biến về khôi phục.
TiGz

Đã xóa khoảng trắng sau %% a = %% b, xem câu trả lời được chỉnh sửa. Nên ổn bây giờ.
Gaff

Điều đó đã loại bỏ một trong hai khoảng trắng ... một khoảng trống ở cuối mỗi dòng SET. Thật là kỳ lạ.
TiGz

Có lẽ không gian đã được thêm vào từ trước khi bạn chạy tập lệnh (hơi bị hỏng) của tôi và bạn đã chạy lô để khôi phục ... do đó thêm một khoảng trắng cho mỗi biến? Sau đó, bạn chạy lại nó và trong đầu ra nó sẽ có hai khoảng trắng? Nếu đây là trường hợp thì xin lỗi vì trước đây đã có tất cả các biến của bạn với một khoảng trắng. Nên dễ dàng để làm sạch mặc dù.
Gaff

Nah - Tôi đã mở một cái vỏ mới mỗi lần. Hãy thử nó ... bạn không kết thúc với một không gian thêm?
TiGz

6

Nếu bạn chỉ muốn xóa tất cả các biến môi trường cho tệp bó, việc này thậm chí còn dễ dàng hơn.

@echo off
Setlocal enabledelayedexpansion
Set >set

For /F "tokens=1* delims==" %%i in (set) do set %% %i=
Del set
Set

Dòng cuối cùng xuất ra tất cả các biến môi trường, không nên, xác nhận mã đã hoạt động.

Bởi vì Setlocalđược sử dụng, tất cả các thay đổi môi trường bị mất sau khi kết thúc lô. Vì vậy, nếu bạn nhập Setsau lô, bạn sẽ thấy tất cả các biến môi trường vẫn còn đó do đó không cần lưu trữ nó trong tệp sao lưu.


Vui lòng thực hiện một số nỗ lực để sử dụng định dạng mã. Nó làm cho mọi thứ dễ đọc hơn rất nhiều.
boxspah

câu trả lời được chấp nhận tốt hơn câu trả lời này vì câu trả lời khác có cách sao lưu hiện có
SeanClt

@SeanClt Bạn cần đọc bình luận đầy đủ của tôi. Nó nói rằng sao lưu là không cần thiết trong trường hợp này.
Aaron Lowe

@scripthero Hiện tại tôi không thể định dạng bài viết, xin lỗi
Aaron Lowe

Đúng, bạn đúng
SeanClt
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.