2011-02-07 7 views
2

Я написал пакетный скрипт, который проверяет, установлен ли Python, если он не установлен - он запускает установщик Python, содержащийся в той же папке, что и сам.пакетный файл для проверки наличия Python

Я использую следующий код:

reg query "hkcu\software\Python 2.6" 

if ERRORLEVEL 1 GOTO NOPYTHON 

:NOPYTHON 
ActivePython-2.6.4.8-win32-x86.msi 

reg query "hklm\SOFTWARE\ActiveState\ActivePerl\" 1>>Output_%date%_%time%.log 2>&1 
if ERRORLEVEL 1 GOTO NOPERL 

reg query "hklm\SOFTWARE\Gtk+" 
if ERRORLEVEL 1 GOTO NOPYGTK 


:NOPERL 
ActivePerl-5.10.1.1006-MSWin32-x86-291086.msi 1>>Output_%date%_%time%.log 2>&1 

:NOPYGTK 
pygtk_windows_installer.exe 

Но в некоторых случаях программа установки запускается, даже если установлен Python. В чем проблема?

ответ

7

Ваш код не связывается после завершения запроса реестра. Независимо от того, что оценивает первый if ERRORLEVEL, следующим шагом всегда является переход на метку :NOPYTHON.

Ed: Вот пример, как заставить его работать. Идея состоит в том, чтобы добавить другую инструкцию goto, которая при желании пропустит метку :NOPYTHON.

reg query "hkcu\software\Python 2.6" 
if ERRORLEVEL 1 GOTO NOPYTHON 
goto :HASPYTHON 
:NOPYTHON 
ActivePython-2.6.4.8-win32-x86.msi 

:HASPYTHON 
reg query "hklm\SOFTWARE\ActiveState\ActivePerl\" 1>>Output_%date%_%time%.log 2>&1 
10

Для тех, кто хочет простую проверку, если установлен Python и может быть выполнена, не вдаваясь в registy, в пакетный файл:

:: Check for Python Installation 
python --version 2>NUL 
if errorlevel 1 goto errorNoPython 

:: Reaching here means Python is installed. 
:: Execute stuff... 

:: Once done, exit the batch file -- skips executing the errorNoPython section 
goto:eof 

:errorNoPython 
echo. 
echo Error^: Python not installed 
+0

Предполагая, что Python в вашем пути, какой вид пропускает тяжелую часть –

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