Quiero saber cuales son mis errores ya que nunca he programado batch y quiero aprender.
No es por ser rudo o antipático, pero el primer error de todos es la propia intención de querer aprender Batch. No te va a servir para nada, y si como tu has dicho no sabes nada de Batch entonces estás a tiempo de no emprender una mala decisión que no te aportará NADA. Mi consejo es que aprendas cualquier otro lenguaje. Para empezar tienes otros lenguajes nativamente soportados en Windows, como son Visual Basic Script, javascript (javascript for Windows), o PowerShell. Si realmente quieres hacer cosas sofisticadas entonces deberías ir directo a Powershell, ya que puedes utilizar todas las clases de .NET Framework, y gracias a eso además puedes programar en C# y VB.NET en Powershell, si lo pefirieses.
Respecto a los errores del código, el más relevante y por el cual ese código nunca te va a funcionar de la manera en que esperas:
set sistema=ver %sysver%
...no puedes asignar/redireccionar la salida de un comando directamente a una variable, Batch es un lenguaje muy limitado. Aparte de eso, no llego a comprender la intención que pudiste tener al escribir esa variable "%sysver%", ya que el comando ver no acepta ningún argumento, y de todas formas no declaraste ninguna variable con el nombre "sysver".
Para lograr lo que intentas hacer debes utilizar un búcle de tipo
For /F para deliminar/tokenizar y así parsear la salida del comando ver.
Para serte sincero, eso que piensas hacer en Batch no merece la pena, el código te va a quedar muy engorroso. Aparte, el comando ver muestra la salida en el idioma acual... eso es una incomodidad u obstáculo adicional.
if "sistema"==...
Ahí cometes otro error grave, y es que estás comparando la cadena de texto "sistema", no el valor de la variable %sistema%... puesto que te falta añadirle el símbolo % al principio y al final de la cadena de texto para tratarla como variable.
En Powershell, para obtener la versión del sistema operativo sería de la siguiente manera:
[System.Version
]$version = $null
try {
# As of Powershell v3.
# WMI: Win32_OperatingSystem Class
# https://msdn.microsoft.com/en-us/library/aa394239%28v=vs.85%29.aspx
$version = [System.Version
]( (Get
-CimInstance Win32_OperatingSystem
).Version
) } catch {
# For Powershell v1 and v2.
# .NET Framework: System.Version Class
# https://msdn.microsoft.com/en-us/library/system.version%28v=vs.110%29.aspx
$version = [System.Environment
]::OSVersion.Version
}
nota: la solución tiene en cuenta la obsolescencia de la API para obtener la versión de Windows a partir de Windows 8.1.
Aquí te muestro un ejemplo más extenso:
[System.Version
]$version = $null
try {
# As of Powershell v3.
# WMI: Win32_OperatingSystem Class
# https://msdn.microsoft.com/en-us/library/aa394239%28v=vs.85%29.aspx
$version = [System.Version
]( (Get
-CimInstance Win32_OperatingSystem
).Version
) } catch {
# Powershell v1 and v2.
# .NET Framework: System.Version Class
# https://msdn.microsoft.com/en-us/library/system.version%28v=vs.110%29.aspx
$version = [System.Environment
]::OSVersion.Version
}
# Wikipedia: List of Microsoft Windows versions
# https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions
switch ($version.Major) {
10 {
Write-Host "Windows 10"
} 6 {
switch ($version.Minor) {
3 {
Write-Host "Windows 8.1"
} 2 {
Write-Host "Windows 8"
} 1 {
Write-Host "Windows 7"
} default {
Write-Host "Windows VISTA"
}
}
} 5 {
switch ($version.Minor) {
2 {
Write-Host "Windows XP"
} 1 {
Write-Host "Windows XP"
} default {
Write-Host "Windows 2000"
}
}
} default {
Write-Host "Not supported Windows version."
}
}
Saludos.