ฉันจะล้างตัวแปรสภาพแวดล้อมทั้งหมดจากเซสชันเชลล์ Windows ได้อย่างไร


12

ถ้าฉันเริ่มเซสชันเชลล์ Windows ใหม่และพิมพ์:

env

ฉันเห็นชุดตัวแปรสภาพแวดล้อมจำนวนมาก ฉันต้องการดีบักการทำงานของโปรแกรมบรรทัดคำสั่งโดยลบตัวแปรสภาพแวดล้อมทั้งหมดออกจากเซสชันเชลล์ปัจจุบัน

ฉันสามารถไปทีละคนด้วยวิธีการดังต่อไปนี้:

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

อย่างไรก็ตามมีวิธีง่าย ๆ ในการล้างทั้งหมดในครั้งเดียว?


1
คือenvอะไร ฉันไม่เคยได้ยินเรื่องนี้มาก่อนและมันไม่ทำงานที่นี่
Paradroid

คำตอบ:


14

คุณสามารถเขียนสิ่งนี้ในแบทช์ไฟล์:

@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=
)

โดยพื้นฐานแล้วมันจะทำงานผ่านตัวแปรสภาพแวดล้อมแต่ละตัวสำรองไฟล์เหล่านั้นเป็นไฟล์แบตช์ ( backupenv.bat) จากนั้นจึงล้างแต่ละตัวแปร เพื่อเรียกคืนพวกเขาคุณสามารถเรียกใช้backupenv.batไฟล์


มันเยี่ยมมาก ขอบคุณ! สิ่งหนึ่งที่มีขนาดเล็ก: ไฟล์ backupenv.bat ดูเหมือนว่าจะมีช่องว่างต่อท้าย 2 จุดที่ท้ายบรรทัด SET A = B ทุกบรรทัด นี่ดูเหมือนจะทำให้ตัวแปรบางตัวหมดไป
TiGz

ลบช่องว่างที่ตามหลัง %% a = %% b ดูคำตอบที่แก้ไข ควรจะดีตอนนี้
Gaff

นั่นเป็นการกำจัดหนึ่งในสองช่องว่าง ... หนึ่งช่องว่างยังคงอยู่ที่จุดสิ้นสุดของแต่ละบรรทัด SET ซึ่งแปลก
TiGz

บางทีพื้นที่ถูกเพิ่มจากเมื่อก่อนหน้านี้คุณรันสคริปต์ (แตกเล็กน้อย) ของฉันและคุณเรียกใช้ชุดการคืนค่า ... ดังนั้นการเพิ่มช่องว่างให้แต่ละตัวแปรหรือไม่ จากนั้นคุณก็วิ่งอีกครั้งและในการส่งออกมันจะมีสองช่องว่าง? หากเป็นกรณีนี้ขออภัยที่ก่อนหน้านี้มีคำต่อท้ายตัวแปรทั้งหมดของคุณด้วยช่องว่าง ควรทำความสะอาดได้ง่าย
Gaff

Nah - ฉันเปิดกระสุนใหม่ทุกครั้ง ลอง ... คุณไม่ได้พื้นที่เพิ่มหรือไม่?
TiGz

6

หากคุณต้องการล้างตัวแปรสภาพแวดล้อมทั้งหมดสำหรับแบตช์ไฟล์มันจะยิ่งง่ายขึ้น

@echo off
Setlocal enabledelayedexpansion
Set >set

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

บรรทัดสุดท้ายให้ผลลัพธ์ตัวแปรสภาพแวดล้อมทั้งหมดซึ่งไม่ควรมีเพื่อยืนยันว่ารหัสทำงาน

เนื่องจากSetlocalมีการใช้การเปลี่ยนแปลงสภาพแวดล้อมทั้งหมดจะหายไปหลังจากแบทช์สิ้นสุดลง ดังนั้นหากคุณพิมพ์Setหลังจากแบทช์คุณจะเห็นตัวแปรสภาพแวดล้อมทั้งหมดยังคงอยู่ที่นั่นจึงไม่จำเป็นต้องเก็บไว้ในไฟล์สำรอง


โปรดใช้ความพยายามในการใช้การจัดรูปแบบโค้ด มันทำให้สิ่งต่าง ๆ อ่านง่ายขึ้นมาก
boxspah

คำตอบที่ได้รับการยอมรับนั้นดีกว่าคำตอบอื่น ๆ ที่มีวิธีการสำรองข้อมูลที่มีอยู่
SeanClt

@SeanClt คุณต้องอ่านความคิดเห็นแบบเต็มของฉัน มีข้อความระบุว่าไม่จำเป็นต้องสำรองข้อมูลในกรณีนี้
Aaron Lowe

@scripthero ฉันไม่สามารถจัดรูปแบบโพสต์ขอโทษ
Aaron Lowe

ใช่คุณพูดถูก
SeanClt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.