วิธีรับไฟล์โปรแกรมตัวแปร x86 env


108

ฉันต้องการทราบว่าฉันจะแสดงตำแหน่งของ Program Files (x86) ใน command prompt ได้อย่างไร ฉันใช้ Windows 7 64 บิต

ฉันพยายามแล้ว:

echo %programfiles(x86)%และecho %programfiles%,
ทั้งสองซึ่งแสดงเฉพาะC:\Program Files

เมื่อผมตรวจสอบด้วยตนเองรีจิสทรี
HKLM / Software / Microsoft / Windows / CurrentVersion , ชี้ไปและ
programfilesdirC:\Program Files

HKLM / Software / WOW64 / Microsoft / Winodws / CurrentVersion , จุดที่จะต้อง
programfilesdirC:\Program Files (x86)

แต่ทำไมฉันถึงแสดงด้วย C: \ Program Files เสมอ ??


10
ฉันคิดว่าคำถามที่แท้จริงคือเหตุใดจึงไม่มีเวอร์ชันของ% programfiles% ที่ชี้ไปที่ x86 ทั้งบน windows 7 และ windows xp เพื่อลดความซับซ้อนของโปรแกรมที่รันที่ติดตั้งบนทั้งสอง ตัวอย่างเช่นหลังจากติดตั้ง Debugging Tools สำหรับ Windows (x86) บน XP จะพบใน Program Files แต่ใน Windows 7 จะพบใน Program Files (x86) ซึ่งหมายความว่าไม่มีวิธีง่ายๆในการสร้างไฟล์คำสั่งที่สามารถกระจายไปยังคอมพิวเตอร์ทุกเครื่องได้ เนื่องจากไม่มีตัวแปรสภาพแวดล้อมในตัวที่ชี้ไปที่ตำแหน่ง 32 บิตสำหรับ Program Files อย่างสม่ำเสมอ
dj69

[โพสต์หลังจากอ่านคำตอบทั้งหมด] IMHO จุดหนึ่งที่ขาดหายไปในการสนทนานี้คือตัวแปรใด ๆ ที่คุณใช้รับประกันว่าจะชี้ไปที่โฟลเดอร์ที่เหมาะสมเสมอ สิ่งนี้มีความสำคัญในกรณีที่ไม่ค่อยพบบ่อยที่มีการติดตั้ง Windows ในไดรฟ์อื่นที่ไม่ใช่ C: \
Amir Katz

คำตอบ:


179

บนเครื่อง 64 บิตที่ทำงานในโหมด 64 บิต:

  • echo %programfiles% ==> C:\Program Files
  • echo %programfiles(x86)% ==> C:\Program Files (x86)

บนเครื่อง 64 บิตที่ทำงานในโหมด 32 บิต (WOW64):

  • echo %programfiles% ==> C:\Program Files (x86)
  • echo %programfiles(x86)% ==> C:\Program Files (x86)

บนเครื่อง 32 บิตที่ทำงานในโหมด 32 บิต:

  • echo %programfiles% ==> C:\Program Files
  • echo %programfiles(x86)% ==> %programfiles(x86)%

18
% programfiles (x86)% ใดที่จะส่งคืนบนเครื่อง 32 บิตในโหมด 32 บิต
Ivan Kochurkin

บน windows XP (x86) ไม่ทำงานคุณต้องใส่% programfiles% ฉันคิดว่าวิธีเดียวคือตรวจสอบตามรหัสเวอร์ชันของระบบปฏิบัติการก่อนจากนั้นใช้ตัวแปรเดียวหรืออื่น ๆ
gsubiran

3
อาจเป็นการเพิ่ม% ProgramW6432% ในรายการด้านบน
Alex Wiese

2
เช่นเดียวกับ Windows 7 รุ่น 32 บิต - ไม่มีตัวแปรสภาพแวดล้อม% programfiles (x86)%
badsamaritan

1
ฉันที่สอง @Alex Wiese% ProgramW6432% จะมีไดเร็กทอรีไฟล์โปรแกรม 64 บิตเสมอ % ProgramFiles (x86)% จะมีไดเร็กทอรีไฟล์โปรแกรม 32 บิตเสมอ ตัวแปรทั้งสองมีความเสถียร ... ตัวแปรอื่น ๆ อาจเปลี่ยนแปลงได้ขึ้นอยู่กับโหมดที่ระบบปฏิบัติการ 64 บิต (หรือพรอมต์คำสั่ง) กำลังทำงานอยู่
Jason

36

ตัวแปรสภาพแวดล้อมอื่นที่เกี่ยวข้องคือ:

% โปรแกรม W6432%

ดังนั้นบนเครื่อง 64 บิตที่ทำงานในโหมด 32 บิต (WOW64):

  • echo% programfiles% ==> C: \ Program ไฟล์ (x86)
  • echo% programfiles (x86)% ==> C: \ Program Files (x86)
  • echo% ProgramW6432% ==> C: \ Program Files

จากWikipedia :

ตัวแปร% ProgramFiles% ชี้ไปที่ไดเร็กทอรี Program Files ซึ่งเก็บโปรแกรมที่ติดตั้งทั้งหมดของ Windows และอื่น ๆ ค่าเริ่มต้นของระบบภาษาอังกฤษคือ "C: \ Program Files" ใน Windows รุ่น 64 บิต (XP, 2003, Vista) ยังมี% ProgramFiles (x86)% ซึ่งมีค่าเริ่มต้นเป็น "C: \ Program Files (x86)" และ% ProgramW6432% ซึ่งมีค่าเริ่มต้นเป็น "C: \ Program Files ". % ProgramFiles% นั้นขึ้นอยู่กับว่ากระบวนการที่ร้องขอตัวแปรสภาพแวดล้อมนั้นเป็นแบบ 32 บิตหรือ 64 บิต (ซึ่งเกิดจากการเปลี่ยนเส้นทาง Windows-on-Windows 64 บิต)

ข้อมูลอ้างอิง: http://en.wikipedia.org/wiki/Environment_variable


3
อ้างอิงได้ดีกว่า: MSDN: WOW64 Implementation Details - "ตัวแปรสภาพแวดล้อม ProgramW6432 และ CommonProgramW6432 ถูกเพิ่มโดยเริ่มจาก Windows 7 และ Windows Server 2008 R2" วิกิพีเดียขัดแย้งโดยตรงกับเรื่องนี้ ที่น่าสนใจคือ Wikipedia แสดงเฉพาะสามเวอร์ชันที่ไม่รองรับตัวแปรนี้ตาม MSDN น่าเสียดายที่ฉันไม่มี XP / Vista 64 บิตให้ทดสอบ
Lexikos

1
ในการอ่านครั้งที่สองฉันเห็นว่าข้อกำหนดของ Windows 7/2008 R2 ใช้กับกระบวนการ 64 บิตเท่านั้น ตัวแปรนี้กำหนดไว้สำหรับกระบวนการ 32 บิตบน Vista x64 เท่านั้น
Lexikos


0

IMHO จุดหนึ่งที่ขาดหายไปในการสนทนานี้คือตัวแปรใด ๆ ที่คุณใช้รับประกันว่าจะชี้ไปที่โฟลเดอร์ที่เหมาะสมเสมอ สิ่งนี้มีความสำคัญในกรณีที่ไม่ค่อยพบบ่อยที่มีการติดตั้ง Windows ในไดรฟ์อื่นที่ไม่ใช่ C: \


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