2

Я хотел бы написать командный файл, в котором некоторые команды предназначаются для элементов в папке Program Files , который, естественно, является кросс-совместимым от Windows XP до Windows 7 x64 и Server 2008 R2. Однако в 64-битных системах мне понадобится имя папки Program Files (x86) .

Есть ли пакетная команда, которая позволит мне определить архитектуру системы и написать оператор IF для использования соответствующей папки? Альтернативно, есть универсально применимая переменная среды, которая укажет мне на правильную папку? Или мне нужно настроить часть моего скрипта для поиска папки x86 и использовать ее, если она есть, только с использованием другой папки, если ее нет?

2 ответа2

1

Я не могу вспомнить, где я нашел это, но вы можете это сделать. Я изменил его, чтобы проверить для 32-битной и 64-битной Windows 7. Это должно быть довольно понятно.

@echo off

ver | find "2003" > nul
if %ERRORLEVEL% == 0 goto ver_2003

ver | find "XP" > nul
if %ERRORLEVEL% == 0 goto ver_xp

ver | find "2000" > nul
if %ERRORLEVEL% == 0 goto ver_2000

ver | find "NT" > nul
if %ERRORLEVEL% == 0 goto ver_nt

if not exist %SystemRoot%\system32\systeminfo.exe goto warnthenexit

systeminfo | find "OS Name" > %TEMP%\osname.txt
FOR /F "usebackq delims=: tokens=2" %%i IN (%TEMP%\osname.txt) DO set vers=%%i

echo %vers% | find "Windows 7" > nul
if %ERRORLEVEL% == 0 goto ver_7

echo %vers% | find "Windows Server 2008" > nul
if %ERRORLEVEL% == 0 goto ver_2008

echo %vers% | find "Windows Vista" > nul
if %ERRORLEVEL% == 0 goto ver_vista

goto warnthenexit

:ver_7

::Check if 32 or 64 bit
Set RegQry=HKLM\Hardware\Description\System\CentralProcessor\0
REG.exe Query %RegQry% > checkOS.txt
Find /i "x86" < CheckOS.txt > StringCheck.txt

    If %ERRORLEVEL% == 0 (
        :Run Windows 7 32 bit specific commands here.
        Echo "This is 32 Bit Windows 7"
    ) ELSE (
        :Run Windows 7 64 bit specific commands here.
        Echo "This is 64 Bit Windows 7"
    )

goto exit

:ver_2008
:Run Windows Server 2008 specific commands here.
echo Windows Server 2008
goto exit

:ver_vista
:Run Windows Vista specific commands here.
echo Windows Vista
goto exit

:ver_2003
:Run Windows Server 2003 specific commands here.
echo Windows Server 2003
goto exit

:ver_xp
:Run Windows XP specific commands here.
echo Windows XP
goto exit

:ver_2000
:Run Windows 2000 specific commands here.
echo Windows 2000
goto exit

:ver_nt
:Run Windows NT specific commands here.
echo Windows NT
goto exit

:warnthenexit
echo Machine undetermined.

:exit
1

Вы можете просто проверить, является ли ProgramFiles(x86) пустым или нет. Пока никакой пользователь или программа не установили это вручную.

@ECHO OFF

IF "%ProgramFiles(x86)%"=="" GOTO 64 ELSE goto 86

:64
ECHO %ProgramFiles(x86)%

GOTO Quit

:86
ECHO %ProgramFiles%

GOTO Quit

:Quit
PAUSE

Кроме того, вы можете проверить переменную PROCESSOR_ARCHITECTURE - если это 32-разрядная система, то она должна быть "x86", если это x86-64, это должна быть "AMD64", если это процессор Itanium, это должно быть "IA64". Хотя я не тестировал Itanium. И я не уверен, что они скажут в случае установки 32-битной системы Windows на компьютер с архитектурой x86-64.

Они были проверены / протестированы на Windows 7 и должны работать на Vista. 64-битная Windows XP всегда была хитрой, поэтому она может не работать там.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .