2015-02-26 4 views
0

Вы можете мне помочь?Пакетный скрипт не работает

Эта часть скрипта не работает, и я не могу понять, почему.

@echo off 
ver | findstr /i "5\.1\." 
if %ERRORLEVEL% EQU 0 (
    set os_ver="xp" 
) 

ver | findstr /i "6\.1\." > nul 
if %ERRORLEVEL% EQU 0 (
    set os_ver="7" 
) 

if %os_ver% == "xp" (
    set os_bits="32" 
) 

if %os_ver% == "7" (
    if %PROCESSOR_ARCHITECTURE% == "x86" (
     set os_bits="32" 
    ) else (
     set os_bits="64" 
    ) 
    echo %os_bits% 
) 
pause 

это ничего не эхо, несмотря на «ЭХО деактивирована» или «ЭХО активизировано»

обновления: я разместил весь код, обусловлены люди говорят, что он работает

Update2: Я на Windows 7 64 бит

+1

Работы для меня. Я не вижу ничего плохого в вашем пакетном коде, кроме того, что вы должны иметь «% PROCESSOR_ARCHITECTURE%», но это не влияет на функциональность. –

+0

Я обновил весь код. – Rafael

+0

"ЭХО ДЕАКТИВИРОВАНО"? Вы переводите? Если это так, английская версия сообщения «ECHO отключена». – eryksun

ответ

1

Пакетный скрипт работает нормально. Он не будет эхом, если ваша машина не является Windows 7.

Попробуйте следующее:

@echo off 

set os_ver="unknown!" 
set os_bits="unknown!" 

ver | findstr "5\.1" > nul 
if %ERRORLEVEL% EQU 0 (
    set os_ver="xp" 
) 

ver | findstr "6\.1" > nul 
if %ERRORLEVEL% EQU 0 (
    set os_ver="7" 
) 

if %os_ver% == "xp" (
    set os_bits="32" 
) 

if %os_ver% == "7" (
    if %PROCESSOR_ARCHITECTURE% == "x86" (
     set os_bits="32" 
    ) else (
     set os_bits="64" 
    ) 
) 

echo os_ver = %os_ver% 
echo os_bits = %os_bits% 

pause 

Update: комментатор eryksun предоставило правильную причину, почему этот код работает, а опы не даже если он находится на Windows7. (Хороший улов)

В версии OP echo% os_bits% выполняется в рамках той же команды, которая устанавливает os_bits. Во время разбора команды и отправки os_bits не существует (если он уже не был установлен), поэтому он просто выполняет эхо, которое выводит, включено или выключено эхо. - eryksun

+0

Работает как шарм, спасибо! Но я хотел знать, почему он не работал раньше. Что мне не хватало? – Rafael

+0

размещение команды echo выполнялось только внутри проверки для Windows 7. Я сделал некоторые другие незначительные изменения для вашего кода, а также для хорошей практики, но они ничего не повлияли. например, удаленные/i переключатели для findstr (не нужно, если вы сравниваете числа, case-senstive более эффективен) и добавляет> nul для проверки xp ver, поэтому он не будет эха в случае обнаружения xp. –

+0

@ Rafael Пожалуйста, подтвердите, какая версия вашего окна для других читателей, поэтому я могу обновить ответ с более подробной информацией, чтобы помочь описать, почему это работает. Я предполагаю, что вы не на окнах 7. –

0

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

@echo off 
setlocal 
if "%PROCESSOR_ARCHITECTURE%" equ "x86" (
    set os_bits="32" 
) else (
    set os_bits="64" 
) 
echo %os_bits% 
+0

equ предназначен для сравнения чисел, == предназначен для сравнения строк –

+0

Это тоже не работает. Я обновил весь код – Rafael

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