批处理文件以检查是否安装了Python

fix*_*xer 4 windows installer

我编写了一个批处理脚本来检查是否安装了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
Run Code Online (Sandbox Code Playgroud)

但在某些情况下,即使安装了Python,安装程序也会启动.这里有什么问题?

小智 13

对于那些只想简单检查是否安装了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
Run Code Online (Sandbox Code Playgroud)


von*_*ryz 9

注册表查询完成后,您的代码不会分支.无论第一个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  
Run Code Online (Sandbox Code Playgroud)