มีโฟลเดอร์มากเกินไปในตัวแปรพา ธ


15

ฉันพบปัญหาแปลก ๆ - ฉันไม่สามารถเปิด Visual Studio หรือเรียกใช้คำสั่งง่ายๆจากพรอมต์คำสั่งดูเหมือนว่าเนื่องจากตัวแปร PATH ของฉันยาวเกินไป ตอนนี้ฉันดูแล้วฉันเห็นว่าหลาย บริษัท ได้เพิ่มไดเรกทอรีการติดตั้งลงในตัวแปร PATH

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


1
ฉันไม่รู้สึกว่ามันยาวเป็นพิเศษPATH... อะไรทำให้คุณสงสัยว่ามันนานเกินไป VS มีข้อผิดพลาดบางอย่างหรือไม่? นอกจากนี้คุณใช้ Windows รุ่นใดอยู่
bosco

@bosco pingฉันสงสัยว่ามันยาวเกินไปเพราะไม่พร้อมรับคำสั่งสามารถค้นหาคำสั่งง่ายๆเช่น นอกจากนี้ก็ดูเหมือนว่าเรื่องนี้ไม่ใช่เรื่องแปลกที่มีภาพสตูดิโอ มีการกล่าวถึงที่นี่ด้วยว่าขีด จำกัด ของ PATH โดยใช้บรรทัดคำสั่งอยู่ที่ประมาณ 2,000
CC Inc

Visual studio 2012 ส่งข้อผิดพลาด "ข้อยกเว้นถูกส่งออกโดยเป้าหมายของการร้องขอ" เมื่อเริ่มต้น และเมื่อฉันดูใน ActivityLog.xml มันก็บอกฉันThe type initializer for 'Microsoft.VisualStudio.Platform.WindowManagement.WindowManagerService' threw an exception.
CC Inc

2
ทุกประเภทของแฮ็กและการแก้ปัญหาในคำตอบที่ได้รับการยอมรับของคำถามกองมากเกิน # 4405091 :)
Bosco

คำตอบ:


13

เป็นไปได้ที่จะลดจำนวนพา ธ ที่มากเกินไปในตัวแปรสภาพแวดล้อม PATH เพียงบันทึกทั้งบรรทัดลงในแผ่นจดบันทึกเพื่อสำรองและลบบางส่วนและทดสอบ

ส่วนใหญ่จะอยู่ที่นั่นดังนั้นหากทางลัดไม่ได้กำหนดเส้นทางแบบเต็มสำหรับ "เป้าหมาย" หากไม่ได้ตั้งค่า "เริ่มต้นใน" ในทางลัดอย่างถูกต้องหรือมีการเปิดใช้งานอย่างแปลก ๆ โปรแกรมของพวกเขาและชิ้นส่วนและชิ้นส่วน พบ มันเป็น Failsafe ในสถานการณ์ส่วนใหญ่ คุณยังคงต้องการทดสอบการใช้งานโปรแกรมใด ๆ ที่คุณลบเส้นทางอย่างสมบูรณ์
นอกจากนี้ยังเป็นประโยชน์อย่างมากกับผู้ที่พิมพ์คำสั่งลงใน CMDprompt แม้ไม่มีซีดีคอมพิวเตอร์จะสแกนแต่ละตำแหน่งจนกว่าจะพบโปรแกรมที่ใช้ชื่อนั้นและเรียกใช้ หรือคำสั่งอื่น ๆ ที่มีชื่อเดียวกัน :-)

ชุดของเส้นทางนั้น WAS (anchient) จำกัด ให้น้อยกว่า 255 (or260) charachters ซึ่งเปลี่ยนเป็น 1024 นานแล้วจากนั้นได้รับการแก้ไขในยุค server'03 เพื่อจัดการ 2048 และคาดว่าจะสามารถจัดการ 8096 ในบางระบบได้ นานมาแล้ว.

ข้อ จำกัด จริงที่ค้นพบในทุกวันนี้ที่ผู้คนพบเจอนั้นอยู่ใน CMDprompt ซึ่งมีข้อ จำกัด เกี่ยวกับความยาวของสตริงคำสั่งซึ่งรวมถึงการขยายตัวของตัวแปรและเส้นทาง

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682653(v=vs.85).aspxที่นี่ Microsoft พูดว่า:

"ขนาดสูงสุดของตัวแปรสภาพแวดล้อมที่ผู้ใช้กำหนดคือ 32,767 ตัวอักษรไม่มีข้อ จำกัด ทางเทคนิคกับขนาดของบล็อกสภาพแวดล้อมอย่างไรก็ตามมีข้อ จำกัด ในทางปฏิบัติขึ้นอยู่กับกลไกที่ใช้ในการเข้าถึงบล็อกตัวอย่างเช่นแบตช์ไฟล์ ไม่สามารถตั้งค่าตัวแปรที่ยาวกว่าความยาวบรรทัดคำสั่งสูงสุดได้ "

ที่ตำแหน่งนั้น ^ พวกเขาชี้ไปที่ตำแหน่งรีจิสทรีที่มีเส้นทางของระบบHKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment จะต้องอ่านส่วนที่เหลือของมันที่นั่น

ข้อ จำกัด CMDprompt และแบตช์คือ 2048 charachters ที่ขยายตัวครั้งหนึ่งและได้รับการกล่าวว่าเป็น 4x สำหรับระบบที่ใหม่กว่า (ต้องการการอ้างอิงเพราะผู้คนไม่เห็นสิ่งนั้น)

ดูที่http://support.microsoft.com/kb/830473ซึ่งกล่าวถึงพรอมต์คำสั่งและความยาวแบทช์สำหรับระบบเก่า

เพื่อให้แน่ใจว่ารายการถูกต้องที่นั่นวิกิมีสิ่งนี้เพื่อพูดว่า:
http://en.wikipedia.org/wiki/Environment_variable

% PATH% ตัวแปรนี้ประกอบด้วยเซมิโคลอนที่คั่นด้วย ( อย่าใส่ช่องว่างระหว่าง ) รายการของไดเรกทอรีที่ล่ามคำสั่งจะค้นหาไฟล์ปฏิบัติการที่ตรงกับคำสั่งที่กำหนด ตัวแปรสภาพแวดล้อมที่เป็นตัวแทนของเส้นทางอาจซ้อนอยู่ภายในตัวแปร PATH แต่มีเพียงระดับเดียวเท่านั้น หากตัวแปรสภาพแวดล้อม subpath นี้มีตัวแปรสภาพแวดล้อมที่แสดงถึงพา ธ PATH จะไม่ขยายอย่างเหมาะสมในการทดแทนตัวแปร

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

ใช้การประชุมแบบเก่าของ DOSlike 8.3 เป็นวิธีหนึ่งในการลดขนาดชุด งานนี้/programming//a/20362922 ใช้งานได้ดี ตรวจสอบให้แน่ใจ (อีกครั้ง) เพื่อสำรองข้อมูลสตริงเดิม ดูโซลูชันอื่น ๆ ที่เป็นไปได้สำหรับคำถามนั้น

นี่คือลักษณะของฉันมันเลวร้ายลง
% SystemRoot% \ system32;% SystemRoot%;% SystemRoot% \ System32 \ Wbem;% SYSTEMROOT% \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Program Files (x86) \ QuickTime \ QTSystem \

ฉันจะโยนออกมาอย่างรวดเร็วในหัวใจและโปรแกรมของ AMD ได้ใส่เส้นทางที่ขยายในนั้นก่อนที่จะโยนมัน Adobee มีหนึ่งสิ่งเหล่านี้ไม่สำคัญสำหรับวิธีการทางลัด GUI / ไอคอนมาตรฐาน GUI สามารถลบได้หลายอย่างจากนั้นทดสอบฟังก์ชั่นทั้งหมด หากคุณเรียกสิ่งต่าง ๆ ด้วยการพิมพ์คำสั่ง CMD การลบเส้นทางเหล่านั้นจะไม่ทำงาน


ดังนั้นคุณกำลังบอกว่าแอปพลิเคชันจะไม่ล้มเหลวหากฉันลบเส้นทาง?
CC Inc

Windows 7 64-bit
CC Inc

มีอะไรในนั้นคุณรู้ว่าถอนการติดตั้งแล้ว? นำ Qt, AMd และ Nividia (หลังจากที่คุณสำรองไว้) mabey และดูว่ามันสั้นพอไหม? ฉันโพสต์ของฉันมันมีความยาวประมาณ 140 ตัวอักษร
Psycogeek

โอเคฉันจะเห็น ..
CC Inc

3
ข้อ จำกัด ที่ดูเหมือนจะเป็น2048 ตัวอักษร หลังจากจุดนั้นฉันไม่สามารถป้อนอักขระเพิ่มเติมลงใน GUI ตัวแปรสภาพแวดล้อมได้อีก
Mateen Ulhaq

9

ฉันมีตัวแปรสภาพแวดล้อมที่เกี่ยวข้องกับการพัฒนาซอฟต์แวร์หลายอย่างบนเส้นทางของฉันซึ่งทั้งหมดมีความสำคัญ

วิธีแก้ปัญหาข้างต้นไม่ได้ผลสำหรับฉันดังนั้นฉันจึงไปหาjunctions ไดเรกทอรี :

  • เลือกเส้นทางที่ยาวที่สุดใน PATH ของฉัน (Like C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\)
  • สร้างโฟลเดอร์ขนาดเล็กเพื่อจัดเก็บทางแยกของฉัน: c: \ d \
  • สร้างทางแยกสั้น ๆ สำหรับเส้นทางยาว:

mklink / jc: \ d \ sql "ไฟล์ C: \ Program (x86) \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \" SQL

การทำเช่นนั้นใน 15 พา ธ ทำให้ PATH ของฉันลดลงจาก 2045 เป็น 1285 ตัวอักษร

อาจเป็นปัญหาเมื่อคุณถอนการติดตั้งสิ่งต่าง ๆ จากเครื่องของคุณในที่สุดเนื่องจากรอยต่อจะยังคงอยู่ในเส้นทางและคุณจะต้องทำความสะอาดด้วยตนเอง


1
ฉันมีสภาพแวดล้อมที่ค่อนข้างปกติ dev, VS ล่าสุดและหลายรุ่นที่เก่ากว่าและติดตั้งเซิร์ฟเวอร์ SQL นี่คือทางออกที่ดีที่สุด คำตอบที่ยอมรับได้ในการโยนเส้นทางออกนั้นไร้สาระ
ตาข่าย

คุณเปลี่ยนรายการเส้นทางของรีจิสทรีสำหรับ C: \ Program Files (x86) \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \ to SQL เป็นอย่างไร c: \ d \ sql?
OutOFTouch

หากคุณหมายถึงตัวแปรสภาพแวดล้อม PATH แล้วใช่ ฉันไม่ได้ยุ่งกับการอ้างอิงอื่น ๆ ไปยังไดเรกทอรีของ SQL Server
Juliano

นี่คือการสอนเล็ก ๆ น้อย ๆ เกี่ยวกับการเชื่อมโยงอย่างหนัก: howtogeek.com/howto/16226/ …
ofer.sheffer

1

ในขณะที่ค่าสูงสุดที่อนุญาตในเส้นทางนั้นยาวกว่ามากฉันได้พบคำตอบที่มีสิทธิ์ของ Stack Overflow ในหัวข้อนี้ (และการอ้างอิงของ Microsoft) ที่ระบุว่าค่าพา ธ ที่ขยายได้สูงสุด2048 ไบต์จะทำงานและสิ่งอื่น ๆ นานกว่านั้นจะทำให้เกิดปัญหา โดย "Expand" ฉันหมายถึงว่าตัวแปรใด ๆ ที่แสดงด้วยตัวคั่น% จะมีการใส่ค่าของพวกเขาเพื่อกลายเป็นค่าที่ขยายตัวและความยาวที่ขยายทั้งหมดต้องไม่เกิน 2048 ไบต์ ฉันสังเกตว่าประเภทของปัญหาที่เกิดขึ้น (ณ Windows 7) คือ:

  • ไม่รู้จักเส้นทางในตอนท้ายของค่า
  • การติดตั้งซอฟต์แวร์หรือแพตช์ที่ปรับเปลี่ยนค่า PATH ทำให้ค่ารันไทม์กลายเป็น NULL ซึ่งทำให้เกิดปัญหาทุกประเภทที่ใช้ Windows เช่นไอคอน Start Menu, Desktop และ Task Bar ของคุณสูญเสียภาพและคำสั่งพร้อมรับคำสั่งอย่างง่ายเช่น " คำสั่ง ping "หรือ" ipconfig "show ไม่รู้จักข้อผิดพลาด
  • แอ็พพลิเคชันโปรแกรมที่ใช้ค่า PATH ล้มเหลว

โดยส่วนตัวแล้วฉันแนะนำระบบปฏิบัติการอื่น ๆ นอกเหนือจาก Windows แต่ถ้าคุณติดอยู่กับมันคุณต้องใช้เวลาหลายชั่วโมงในการลบรายการพา ธ ทดสอบเพื่อให้แน่ใจว่ามันจะไม่ทำลายอะไรเลยและรับค่าพา ธ เป็น 2048 ไบต์


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