пакетный файл, чтобы проверить, установлен ли Python - PullRequest
3 голосов
/ 07 февраля 2011

Я написал пакетный скрипт, который проверяет, установлен ли 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. В чем здесь проблема?

Ответы [ 2 ]

13 голосов
/ 07 октября 2014

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

:: 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
8 голосов
/ 07 февраля 2011

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

Ред .: Вот пример, как заставить это работать. Идея состоит в том, чтобы добавить еще один оператор 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  
...