2013-05-06 4 views
0

У меня есть скрипт установки, который должен работать по-разному, если работает на XP/2003 или 7/R2, и он работает отлично. UNTIL пару недель назад я узнал, что он не работает на XPe (отлично работает на 7e), оказывается, find.exe не входит в XPe.Пакетный файл для определения версии Windows на XP Embedded

Мой текущий скрипт использует:

ver | find "5." > nul 
if %ERRORLEVEL% == 0 goto WinXP 
    goto Win7 

Я заимствовал коллеги XPe устройство для проверки работоспособного решения, я пытался копировать FIND.EXE от XP Pro, но он по-прежнему не работает. Я пробовал разные версии (полный путь к findxp.exe, с/без .exe), но он по-прежнему не работает. Вот результат от XPe.

ver | findxp.exe "5." 1>nul 
The system cannot find the file specified. 

Все, что я действительно забочусь, чтобы определить, является ли это XP/2003, в противном случае я предполагаю, что это Vista (ха-ха) или 2008 или более поздней версии. Хотя я бы не стал возражать против решения, которое говорило мне, было ли это XPe, я думаю, что это может пригодиться или не пригодиться в будущем, хотя это, вероятно, сделает скрипт более сложным, поскольку ему придется учитывать все версии Windows.

Спасибо, Brian

ответ

2

Сегмент кода ниже является прямой заменой исходного кода, которые не требуют find.exe:

for /F "delims=" %%a in ('ver') do set ver=%%a 
if "%ver:5.=%" neq "%ver%" goto WinXP 
goto Win7 
+0

Сегодня я нахожусь в офисе, увидев, могу ли я украсть эту машину XPe в течение нескольких часов, чтобы попробовать это. – Brian

+0

Спасибо за это. Это прекрасно работало! Хотя мой скрипт довольно сложный и делает совсем немного, я не использовал никаких 'for' или' :: delims = "%% aa', поэтому мне придется посмотреть на это и поиграть с ним. Но это проще, чем решение Endoro (которое мне также понравилось и может в конечном итоге использовать в какой-то момент). Спасибо всем, что помогло !! – Brian

+0

@Brian: Небольшая деталь, я думаю, недостаточно ясна, так это то, что «Endoro's решение »было написано мной. Просмотрите вторую ссылку в строке« © Aacini at dostips »под кодом в ответе Эндоро ... – Aacini

0
@ECHO OFF 
SET OSVersion=Unknown 

VER | FINDSTR /L "5.0" > NUL 
IF %ERRORLEVEL% EQU 0 SET OSVersion=2000 

VER | FINDSTR /L "5.1." > NUL 
IF %ERRORLEVEL% EQU 0 SET OSVersion=XP 

VER | FINDSTR /L "5.2." > NUL 
IF %ERRORLEVEL% EQU 0 SET OSVersion=2003 

VER | FINDSTR /L "6.0." > NUL 
IF %ERRORLEVEL% EQU 0 SET OSVersion=Vista 

VER | FINDSTR /L "6.1." > NUL 
IF %ERRORLEVEL% EQU 0 SET OSVersion=7 

IF %OSVersion%==Unknown (
ECHO Unable to determine your version of Windows. 
) ELSE (
ECHO You appear to be using Windows %OSVersion% 
) 

ECHO. 
PAUSE 
0

Проверьте это ниже. Кроме того, вы можете получить доступ к нему здесь: http://pastebin.com/iUtgN4ZU

@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 
:Run Windows 7 specific commands here. 
echo 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 

Сохраните файл% WINDIR% \ vers.bat

И после этого запуска из командной строки:

vers 

Это будет отображать какая версия Windows.

+0

Это вона» t работать с XP Embedded, поскольку я использую ту же команду, но find.exe не включен в XPe ... как я изначально заявил. Поскольку мой скрипт отлично работает для любой ОС, кроме XPe. – Brian

0

Попробуйте это:

@echo off 
setlocal EnableDelayedExpansion 

::Identify OS 
for /F "delims=" %%a in ('ver') do set ver=%%a 
set Version= 
for %%a in (95=95 98=98 ME=ME NT=NT 2000=2000 5.1.=XP 5.2.=2003 6.0.=Vista 6.1.=7 6.2.=8) do (
    if "!Version!" equ "this" (
     set Version=Windows %%a 
    ) else if "!ver: %%a=!" neq "%ver%" (
     set Version=this 
    ) 
) 

::Identify bit 
if exist "%SYSTEMDRIVE%\Program Files (x86)" (
    set Type=64 bit 
) else (
    set Type=32 bit 
) 

::Display result 
echo %Version% %Type% 

© Aacinidostips на

+0

Мне нравится ваша проверка 32/64, хотя я использую более простую версию: 'if exist '% programfiles (x86)%" goto x64' – Brian

+0

Я пытаюсь выяснить ваш оператор IF на моем Win7, t выведите «equ» эту «часть». Независимо от того, вставил ли я 'equ" 6.1. "Или' equ "7" ', похоже, что он не работает. Кроме того, можно ли использовать эту работу для нескольких значений (XP, 2003 и т. Д.) Без нескольких IF? Благодарю. – Brian

+0

Работает от Windows 95 до Win 8 '95 = 95 98 = 98 ME = ME NT = NT 2000 = 2000 5.1. = XP 5.2. = 2003 6.0. = Vista 6.1. = 7 6.2. = 8'. См. Также [здесь] (http://www.dostips.com/forum/viewtopic.php?p=24774#p24774). – Endoro

Смежные вопросы