elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Duda sobre este intento de batch
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda sobre este intento de batch  (Leído 1,927 veces)
Dan567897

Desconectado Desconectado

Mensajes: 3



Ver Perfil
Duda sobre este intento de batch
« en: 24 Abril 2018, 01:27 am »

Hola buenas, es mi primer post así que sed amables.
Os comento, quiero hacer un batch el cual detecte qué sistema operativo tienes instalado (es una chorrada pero me vendrá bien en el futuro)


Código:

@echo off
color A
:Inicio
echo Vamos a comprobar su sistema operativo
TIMEOUT 3
goto :sistema

:Sistema
cls
set sistema=ver %sysver%
if "sistema"=="Microsoft Windows [Versión 6.1*" goto W7
if "sistema"=="Microsoft Windows [Versión 6.2*" goto W8
if "sistema"=="Microsoft Windows [Versión 6.3*" goto W8
if "sistema"=="Microsoft Windows [Versión 6.4*" goto W10
if "sistema"=="Microsoft Windows [Versión 10.*" goto W10

:W7
color B
echo.
echo.
echo Usted tiene el Sistema Operativo Windows 7
goto :end
:W8
color B
echo.
echo.
echo Usted tiene el Sistema Operativo Windows 8
goto :end
:W10
color B
echo.
echo.
echo Usted tiene el Sistema Operativo Windows 10
goto :end



:end
pause>nul
exit

Quiero saber cuales son mis errores ya que nunca he programado batch y quiero aprender.
Gracias de antemano y un saludo.  :rolleyes:


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.813



Ver Perfil
Re: Duda sobre este intento de batch
« Respuesta #1 en: 24 Abril 2018, 06:05 am »

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:

Código
  1. [System.Version]$version = $null
  2.  
  3. try {
  4.    # As of Powershell v3.
  5.    # WMI: Win32_OperatingSystem Class
  6.    # https://msdn.microsoft.com/en-us/library/aa394239%28v=vs.85%29.aspx
  7.    $version = [System.Version]( (Get-CimInstance Win32_OperatingSystem).Version )
  8. } catch {
  9.    # For Powershell v1 and v2.
  10.    # .NET Framework: System.Version Class
  11.    # https://msdn.microsoft.com/en-us/library/system.version%28v=vs.110%29.aspx
  12.    $version = [System.Environment]::OSVersion.Version
  13. }
  14.  
  15. $version | Format-List



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:
Código
  1. [System.Version]$version = $null
  2.  
  3. try {
  4.    # As of Powershell v3.
  5.    # WMI: Win32_OperatingSystem Class
  6.    # https://msdn.microsoft.com/en-us/library/aa394239%28v=vs.85%29.aspx
  7.    $version = [System.Version]( (Get-CimInstance Win32_OperatingSystem).Version )
  8. } catch {
  9.    # Powershell v1 and v2.
  10.    # .NET Framework: System.Version Class
  11.    # https://msdn.microsoft.com/en-us/library/system.version%28v=vs.110%29.aspx
  12.    $version = [System.Environment]::OSVersion.Version
  13. }
  14.  
  15. # Wikipedia: List of Microsoft Windows versions
  16. # https://en.wikipedia.org/wiki/List_of_Microsoft_Windows_versions
  17. switch ($version.Major) {
  18.    10 {
  19.        Write-Host "Windows 10"
  20.  
  21.    } 6 {
  22.        switch ($version.Minor)  {
  23.            3 {
  24.                Write-Host "Windows 8.1"
  25.            } 2 {
  26.                Write-Host "Windows 8"
  27.            } 1 {
  28.                Write-Host "Windows 7"
  29.            } default {
  30.                Write-Host "Windows VISTA"
  31.            }
  32.        }
  33.  
  34.    } 5 {
  35.        switch ($version.Minor)  {
  36.            2 {
  37.                Write-Host "Windows XP"
  38.            } 1 {
  39.                Write-Host "Windows XP"
  40.            } default {
  41.                Write-Host "Windows 2000"
  42.            }
  43.        }
  44.  
  45.    } default {
  46.        Write-Host "Not supported Windows version."
  47.  
  48.    }
  49. }
  50.  
  51. Exit(0)

Saludos.


« Última modificación: 24 Abril 2018, 10:30 am por Eleкtro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda sobre batch
Scripting
zerocaos 2 2,259 Último mensaje 6 Noviembre 2007, 23:11 pm
por zhynar_X
Duda sobre batch « 1 2 »
Scripting
MK-Ultra 10 6,699 Último mensaje 9 Diciembre 2007, 12:32 pm
por MK-Ultra
[V][batch]Primer Intento
Scripting
dArKo2 6 3,235 Último mensaje 23 Septiembre 2010, 01:36 am
por dArKo2
(duda sobre este foro) ¿Se puede poner links sobre programación?
Sugerencias y dudas sobre el Foro
Seyro97 5 4,021 Último mensaje 6 Febrero 2015, 17:55 pm
por el-brujo
Duda sobre Batch
Scripting
onlystifmaster 1 1,846 Último mensaje 22 Enero 2018, 23:14 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines