làm thế nào để lấy tệp chương trình biến env x86?


108

Tôi muốn biết cách tôi có thể hiển thị vị trí của Tệp Chương trình (x86) trong dấu nhắc lệnh. Tôi đang sử dụng Windows 7 64bit.

Tôi đã thử:

echo %programfiles(x86)%echo %programfiles%,
cả hai đều chỉ hiển thịC:\Program Files

Khi tôi kiểm tra thủ công sổ đăng ký,
HKLM / Software / microsoft / windows / currentversion ,
các programfilesdirđiểm đến C:\Program Files

HKLM / Software / WOW64 / Microsoft / winodws / currentversion ,
các programfilesdirđiểm đến C:\Program Files (x86).

Nhưng, tại sao tôi luôn được hiển thị với C: \ Program Files ??


10
Tôi nghĩ câu hỏi thực sự là, tại sao không có phiên bản% programfiles% luôn trỏ đến x86 trên cả windows 7 và windows xp để đơn giản hóa các chương trình đang chạy được cài đặt trên cả hai? Ví dụ: sau khi cài đặt Công cụ gỡ lỗi cho Windows (x86) trên XP, nó được tìm thấy trong Tệp chương trình nhưng trên Windows 7, nó được tìm thấy trên Tệp chương trình (x86), có nghĩa là không có cách nào đơn giản để tạo tệp lệnh có thể được phân phối trên tất cả các máy tính vì không có biến môi trường tích hợp nào luôn trỏ đến vị trí 32 bit cho Tệp chương trình.
dj69.

[đã đăng sau khi đọc hết câu trả lời] IMHO, một điểm còn thiếu trong cuộc thảo luận này là bất kỳ biến nào bạn sử dụng, nó được đảm bảo luôn trỏ đến thư mục thích hợp. Điều này trở nên quan trọng trong một số trường hợp hiếm hoi khi Windows được cài đặt trên ổ đĩa không phải là C: \.
Amir Katz

Câu trả lời:


179

Trên máy 64 bit chạy ở chế độ 64 bit:

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

Trên máy 64-bit chạy ở chế độ 32-bit (WOW64):

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

Trên máy 32 bit chạy ở chế độ 32 bit:

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

18
% Programfiles (x86)% nào sẽ trả về trên máy 32-bit ở chế độ 32-bit?
Ivan Kochurkin

Trên windows XP (x86) không hoạt động, bạn cần đặt% programfiles%. Tôi nghĩ rằng cách duy nhất là kiểm tra bằng mã phiên bản hệ điều hành trước và sau đó sử dụng biến này hoặc biến khác.
gsubiran

3
Có thể đáng giá là thêm% ProgramW6432% vào danh sách trên.
Alex Wiese

2
Điều tương tự cũng áp dụng cho phiên bản 32-bit của Windows 7 - không có% programfiles (x86)% môi trường biến
badsamaritan

1
Tôi là @Alex Wiese thứ hai,% ProgramW6432% sẽ luôn có thư mục tệp chương trình 64-bit. % ProgramFiles (x86)% sẽ luôn có thư mục tệp chương trình 32-bit. Hai biến đó ổn định ... những biến khác có thể thay đổi tùy thuộc vào chế độ mà Hệ điều hành 64-bit (hoặc dấu nhắc lệnh) đang chạy.
Jason

36

Một biến môi trường có liên quan khác là:

% ProgramW6432%

Vì vậy, trên máy 64 bit chạy ở chế độ 32 bit (WOW64):

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

Từ Wikipedia :

Biến% ProgramFiles% trỏ đến thư mục Program Files, nơi lưu trữ tất cả các chương trình đã cài đặt của Windows và các chương trình khác. Mặc định trên hệ thống ngôn ngữ tiếng Anh là "C: \ Program Files". Trong các phiên bản 64-bit của Windows (XP, 2003, Vista), cũng có% ProgramFiles (x86)%, được mặc định thành "C: \ Program Files (x86)" và% ProgramW6432%, được mặc định thành "C: \File chương trình". Bản thân% ProgramFiles% phụ thuộc vào quá trình yêu cầu biến môi trường là bản thân 32-bit hay 64-bit (điều này là do chuyển hướng Windows-on-Windows 64-bit).

Tham khảo: http://en.wikipedia.org/wiki/Enosystem_variable


3
Tham khảo tốt hơn: MSDN: Chi tiết triển khai WOW64 - "Các biến môi trường ProgramW6432 và CommonProgramW6432 đã được thêm vào bắt đầu từ Windows 7 và Windows Server 2008 R2." Wikipedia trực tiếp mâu thuẫn với điều này; Điều thú vị là Wikipedia chỉ liệt kê ba phiên bản không hỗ trợ biến này theo MSDN. Rất tiếc, tôi không có XP / Vista 64-bit để kiểm tra.
Lexikos

1
Trong lần đọc thứ hai, tôi thấy rằng yêu cầu Windows 7/2008 R2 chỉ áp dụng cho các quy trình 64-bit. Biến chỉ được định nghĩa cho các quy trình 32-bit trên Vista x64.
Lexikos


0

IMHO, một điểm còn thiếu trong cuộc thảo luận này là bất kỳ biến nào bạn sử dụng, nó được đảm bảo luôn trỏ đến thư mục thích hợp. Điều này trở nên quan trọng trong một số trường hợp hiếm hoi khi Windows được cài đặt trên ổ đĩa không phải là C: \


1
Đây là một lưu ý tốt. Nhưng vì nó không trả lời câu hỏi trực tiếp, nên tốt hơn là viết nó dưới dạng nhận xét cho chính câu hỏi.
AbstractVoid
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.