คุณจะตั้งค่าตัวแปรสภาพแวดล้อมสำหรับคำสั่งเดียวบน Windows ได้อย่างไร [ซ้ำ]


22

มีวิธีการตั้งค่าตัวแปรสภาพแวดล้อมสำหรับคำสั่งเดียวบน Windows เช่นเดียวENVVAR=abc commandกับ Unix หรือไม่?

ตัวแปรที่กำหนดโดยsetคำสั่งบน Windows ดูเหมือนจะยังคงอยู่สำหรับคำสั่งต่อไปนี้ แต่นี่ไม่ใช่สิ่งที่ฉันต้องการ


ฉันคิดว่าคุณจะต้องล้างพวกเขาด้วยตัวเอง
Zina

คำตอบ:


29

มีวิธีการตั้งค่าตัวแปรสภาพแวดล้อมสำหรับคำสั่งเดียวหรือไม่?

จากcmdเปลือกปัจจุบัน:

คุณต้องล้างตัวแปรด้วยตัวเอง

set ENVVAR=abc && dir & set ENVVAR=

จากแบตช์ไฟล์:

คุณสามารถใช้และsetlocalendlocal

@echo off
setlocal 
  set ENVVAR=abc && dir
endlocal

ใช้cmdเปลือกลูก:

คุณสามารถใช้cmd /cเพื่อสร้างเปลือกลูก

ตัวแปรถูกตั้งค่าใน child shell และไม่มีผลกับ parent parent (ดังที่อธิบายไว้ในความคิดเห็นโดยjpmc26 )

cmd /C "set ENVVAR=abc && dir"

อ่านเพิ่มเติม

  • ดัชนี AZ ของบรรทัดคำสั่ง Windows CMD - การอ้างอิงที่ยอดเยี่ยมสำหรับทุกสิ่งที่เกี่ยวข้องกับบรรทัด Windows cmd
  • cmd - เริ่มเชลล์ CMD ใหม่และ (ทางเลือก) เรียกใช้โปรแกรมคำสั่ง / ปฏิบัติการ
  • endlocal - สิ้นสุดการแปลของการเปลี่ยนแปลงสภาพแวดล้อมในแบตช์ไฟล์ ส่งผ่านตัวแปรจากชุดไฟล์หนึ่งไปยังอีกชุดหนึ่ง
  • การเปลี่ยนเส้นทาง - ผู้ประกอบการเปลี่ยนเส้นทาง
  • set - แสดงตั้งค่าหรือลบตัวแปรสภาพแวดล้อม CMD การเปลี่ยนแปลงที่ทำกับ SET จะยังคงอยู่เฉพาะช่วงเวลาของเซสชัน CMD ปัจจุบัน
  • setlocal - ตั้งค่าตัวเลือกเพื่อควบคุมการมองเห็นตัวแปรสภาพแวดล้อมในไฟล์แบตช์

อีกทางเลือกหนึ่งคือการเปิดใช้cmdกระบวนการแยกต่างหากและตั้งค่าไว้ที่นั่น เช่นcmd /C "set ENVVAR=abc && dir". เนื่องจากมันจะไม่ส่งผลกระทบต่อกระบวนการหลักมันจะ "ล้าง" อย่างมีประสิทธิภาพเมื่อออก
jpmc26

@ jpmc26 เยี่ยมมาก ขอบคุณ เพิ่มเพื่อตอบ
DavidPostill

วิธีแรกนั้นจะไม่ล้างตัวแปรหากคำสั่งล้มเหลว
ไม่มีใคร

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