Command Prompt - วิธีเพิ่มเส้นทางที่กำหนดสำหรับไฟล์ชุดนั้นเท่านั้น


187

โดยทั่วไปฉันรู้ว่าฉันสามารถผ่านแผงควบคุมของฉันและปรับเปลี่ยนตัวแปรเส้นทาง แต่ฉันสงสัยว่ามีวิธีผ่านการเขียนโปรแกรมแบบแบตช์รวมเส้นทางชั่วคราวหรือไม่ ด้วยวิธีนี้จะใช้เฉพาะในระหว่างการดำเนินการแบตช์ไฟล์นั้น ฉันไม่ต้องการให้ผู้คนเข้ามาและแก้ไขตัวแปรพา ธ ของพวกเขาเพียงเพื่อใช้ไฟล์แบตช์ของฉัน

คำตอบ:


318

เช่นเดียวกับตัวแปรสภาพแวดล้อมอื่น ๆ ด้วยSET:

SET PATH=%PATH%;c:\whatever\else

หากคุณต้องการให้มีการตรวจสอบความปลอดภัยเล็กน้อยในตัวก่อนตรวจสอบเพื่อดูว่าเส้นทางใหม่ที่มีอยู่ก่อน:

IF EXIST c:\whatever\else SET PATH=%PATH%;c:\whatever\else

หากคุณต้องการที่จะเป็นท้องถิ่นไปยังไฟล์ชุดนั้นใช้setlocal:

setlocal
set PATH=...
set OTHERTHING=...

@REM Rest of your script

อ่านเอกสารอย่างละเอียดเพื่อsetlocal/ endlocalและดูการอ้างอิงอื่น ๆ ในเว็บไซต์นั้น - ฟังก์ชั่นก็น่าสนใจเช่นกันและไวยากรณ์ก็ยุ่งยาก

ไวยากรณ์หน้าคุณควรเริ่มต้นด้วยพื้นฐาน


3
หากคุณเพิ่มsetlocalไฟล์แบตช์ของคุณเส้นทางจะมองเห็นได้เฉพาะในไฟล์
jeb

คุณเพิ่ม "setlocal" หรือไม่ นั่นคือ "SET" หรือไม่?
ไมเคิล

@micheal: อัปเดตคำตอบของฉันพร้อมลิงก์ โปรดอ่านเอกสาร / ตัวอย่าง / แบบฝึกหัดเกี่ยวกับการเขียนสคริปต์ cmd - SETเป็นสิ่งที่คุณควรรู้และเข้าใจก่อนที่จะทำการเขียนสคริปต์
Mat

2
ช่วยชีวิต ฉันต้องการเพิ่ม EV บนเซิร์ฟเวอร์ที่ไม่สามารถรีสตาร์ทได้และนี่ทำให้ฉันสามารถทำสิ่งที่ฉันต้องการได้โดยไม่ต้องกำหนดเวลารีสตาร์ท!
dav_i

8
โดยSETLOCALส่วนใหญ่แล้วจะเป็นเพียงแค่สำหรับเซสชันพรอมต์คำสั่งแต่ละรายการเท่านั้น - หากคุณกำลังทำสิ่งนี้จากไฟล์แบตช์มากกว่าหนึ่งไฟล์และการใช้EXIT /B %N%งานSETLOCALโดยทั่วไปแล้วจะเป็นการถ่ายโอนการเปลี่ยนแปลงของคุณเมื่อสคริปต์ออก : - /
BrainSlugs83

21

มีรายละเอียดที่สำคัญคือ:

set PATH="C:\linutils;C:\wingit\bin;%PATH%"

ไม่ทำงานในขณะที่

set PATH=C:\linutils;C:\wingit\bin;%PATH%

โรงงาน ความแตกต่างคือคำพูด!

UPD ยังเห็นความคิดเห็นโดย venimus


3
ในความเป็นจริงมันควรจะเป็นSET "PATH=...%PATH%"พื้นที่อื่นที่มีอยู่ในเส้นทางจะทำให้เกิดข้อผิดพลาดหรือพฤติกรรมที่ไม่เหมาะสม การใส่เครื่องหมายคำพูดแบบนี้จะไม่รวมอยู่ แต่จะตั้งค่าตัวแปรให้เหมาะสม ทำงานเหมือนกันสำหรับตัวแปร env อื่น ๆ
venimus

20

ถูกต้อง แต่ไม่เปลี่ยนแปลงอย่างถาวร แต่เพียงแค่พร้อมท์คำสั่งปัจจุบันหากคุณต้องการเปลี่ยนอย่างถาวรคุณต้องใช้ตัวอย่างเช่นนี้:

setx ENV_VAR_NAME "DESIRED_PATH" /m

สิ่งนี้จะเปลี่ยนอย่างถาวรและใช่คุณสามารถเขียนทับมันด้วยสคริปต์ชุดงานอื่น


อาจจะ/mต้องมีหลังจากsetx?
suzanshakya

ทำงานเหมือนกันสำหรับฉัน แต่ Win Batch Scripting นี้เป็นธุรกิจที่ยังไม่เสร็จสมบูรณ์จาก MS ใน บริษัท ของฉันที่เรามีแล็ปท็อปเครื่องเดียวกันที่มีระบบเดียวกันไม่มีสคริปต์สากลสำหรับการตั้งค่า PATH และเรากำลังบำรุงรักษาอยู่ 2 หรือ 3 เครื่องดังนั้นสิ่งใดก็ได้ที่เหมาะกับคุณ :)
dumbak

ขอบคุณสำหรับการอัพเดท. ใน Windows Server 2012 เมื่อฉันวางไว้/mท้ายDESIRED_PATHจะถูกเพิ่มด้วย / m ที่ส่วนท้ายสำหรับผู้ใช้ปัจจุบันเท่านั้น
suzanshakya

11
คำเตือน การใช้ setx บนพา ธ พยายามเพิ่มมากกว่านั้นและสตริงมีความยาว> 1024 ฉันค้นพบว่าผลลัพธ์ (PATH สภาพแวดล้อมของฉัน) ถูกตัดทอนอย่างถาวร (สิ่งที่ดีที่ฉันสามารถคัดลอก% PATH% ฉันลบออกก่อนการเปลี่ยนแปลงและนำมันกลับมาโดยใช้เครื่องมือหน้าต่างตัวแปรสภาพแวดล้อม)
Andreas Jansson

ความสนใจ! คำสั่งนี้เขียนทับ System Environment Variable โดยตรง! ฉันลบพวกเขาแล้วและพยายามแก้ไข และสำหรับผู้ที่ทำผิดพลาดนี้: อย่ารีสตาร์ทคอมพิวเตอร์ของคุณ เขียนecho %path%และคุณจะได้รับเส้นทางโหลดปัจจุบัน คุณต้องแยกแยะตัวแปรสภาพแวดล้อมผู้ใช้และระบบจากกัน จากนั้นคุณสามารถนำไปใช้กับสถานที่ที่ถูกต้องได้ด้วยตนเอง
Alper
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.