Как проверить расположение 32-битной папки Program Files в Windows .bat скрипте

Я хочу написать сценарий .bat, который работает под всеми версиями Windows, независимо от того, 32 или 64 бит.

В этом скрипте я хочу запустить какой-нибудь file.exe. Этот файл находится в C: \ Program Files \ в 32-разрядных системах или C: \ Program FIles (x86) \ в системах x64. Я могу написать:

"% ProgramFiles (x86)% \ file.exe" в 64-битных системах или "% ProgramFiles% \ file.exe" в 32-битных системах, но я хочу сделать сценарий универсальным. Есть ли способ универсально определить этот путь?


person Arek    schedule 19.05.2010    source источник


Ответы (5)


Вы можете просто проверить его существование и сохранить путь;

@echo off & setLocal enabledelayedexpansion
if exist "C:\Program Files\app1.exe" (
 set PPATH="C:\Program Files\"
) else (
 set PPATH="C:\Program Files(x86)\"
)

start "" %PPATH%app1.exe
start "" %PPATH%app2.exe
start "" %PPATH%app3.exe
person Alex K.    schedule 19.05.2010
comment
Это решение подвержено ошибкам. Что делать, если ОС на французском или немецком языке? Имя папки для программных файлов там другое, по крайней мере, на XP (не знаю о Vista). - person Sgali; 03.05.2013
comment
Справедливо, если вы работаете в неанглийском языковом стандарте, вы можете заменить жестко заданный путь на% PROGRAMFILES% и% PROGRAMFILES (x86)% соответственно - person Alex K.; 03.05.2013
comment
Да, используйте% ProgramFiles (x86)% или% ProgramFiles% в условиях и PPATH Check stackoverflow.com/questions/9594066/ - person Sgali; 03.05.2013

Скрипт VBS:

 set wshShell = createObject("WScript.Shell")  
    ''-----------------------------------    
    ''Get 32-bit program files path  
    ''-----------------  
    OsType = wshShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\PROCESSOR_ARCHITECTURE")    
    If OsType = "x86" then  
            '''wscript.echo "Windows 32bit system detected"  
            strProgramFiles = wshShell.ExpandEnvironmentStrings("%PROGRAMFILES%")  
    elseif OsType = "AMD64" then  
            '''wscript.echo "Windows 64bit system detected"  
            strProgramFiles = wshShell.ExpandEnvironmentStrings("%PROGRAMFILES(x86)%")  
    end if  
person Prashant    schedule 05.08.2011

"whereis" - это команда Linux для этого, но порт для Windows доступен (я полагаю, unxutils). Без него вы не получите пути.

person Daniel    schedule 19.05.2010

Я думаю, что вместо файла «летучая мышь» вам следует использовать файл VBScript / JScript. Любой из этих сценариев может быть выполнен интерпретатором сценариев Windows (wscript.exe / cscript.exe). Среда сценариев и интерпретаторы доступны во всех версиях окон, поэтому беспокоиться не о чем. Вы можете найти образцы кода для просмотра структуры каталогов, проверки наличия файлов и т. Д. С помощью VBScript. Вы можете использовать объект FileSystemObject для большинства часть.

person Salman A    schedule 19.05.2010

Для простоты всегда можно было сделать следующее:

cd %PROGRAMFILES%
cd %PROGRAMFILES(x86)%
Program.exe

Предполагается, что вам не нужно делать ничего сложного, но если достаточно установить текущий каталог, все должно работать нормально.

person Milton Waddams    schedule 04.11.2013