Ayuda con BAT

Iniciado por elecktra, 13 Abril 2009, 15:22 PM

0 Miembros y 1 Visitante están viendo este tema.

elecktra

Hola gente como estan? estoy necesitando de su ayuda.
Tengo que hacer un BAT que realice lo siguiente.
Teniendo Windows 2000, Xp Pro y Xp Home, que me identifeque la versión de windows y guarde la info en una variable.

Despues que segun la version de windows que detecte ejecute un codigo, el codigo ya lo hice pero me falta la parte de qeu busque la version de windows y segun loq eu encuentre ejecute el codigo.

tengo una idea de como hacerla con los IF pero no estoy seguro.

Otra duda que etngo es que por ejemplo en el BAT para remplazar el disco ocal pongo %HOMEDRIVE%
como puedo remplazar "Documents and Settings"\"Usuario" la idea es porque tengo que copiar un archivo en la carpeta del usuario que esta logueqdo en ese momento.

La ultima duda, para matar procesos uso.
Windows XP Pro: taskkill /F /IM
Windows XP Home: tskill /F /IM - Es correcto este?
Y como hago para matar procesos en Widnows 2000?
Gracias.

Novlucker

Sistema operativo:
http://foro.elhacker.net/scripting/batch_detector_de_sistemas_operativos-t247905.0.html

Carpeta de usuario
Código (dos) [Seleccionar]
%USERPROFILE%

tskill no acepta /IM
Código (dos) [Seleccionar]
C:\>TSKILL /?
Termina un proceso.

TSKILL idproceso | nombreproceso [/SERVER:nombreservidor]
       [/ID:idsesión | /A] [/V]

  idproceso           Id. del proceso para detener.
  nombreproceso       Nombre del proceso para detener.
  /SERVER:nombreservidor  Servidor que contiene el id de proceso (el actual
                      es el predeterminado).
                      Especifíquese /ID o /A al usar el nombre de proceso
                      y /SERVER
  /ID:idsesión       Proceso de detención ejecutándose bajo la sesión
                     especificada.
  /A                  Proceso de detención ejecutándose bajo TODAS las
                      sesiones.
  /V                  Muestra información acerca de las acciones que se
                      están ejecutando.


Kill en win2k
http://support.microsoft.com/kb/301423
http://www.microsoft.com/downloads/details.aspx?familyid=F08D28F3-B835-4847-B810-BB6539362473&displaylang=en

Saludos  :P
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

elecktra

#2
Hola Gracias por al respuesta, pero tengo uan duda, el detector de systema operativo, no me da la diferencia entre Windwos XP pro y Home, porque el problema es por lo que lei, que Windows Xp Pro utiliza taskkill para matar un proceso y xp home usa tskill, estoy en lo correcto?

Con respecto a lo de windows 200 ya lo ahbia visto, pero necesitaria hace un codigo sin tener que instalar las herramientas esas, ya qeu tengo que mandar el codigo por mail a casi 30 maquinas que estan en diferentes provincias de Argentiona, y no tienen permisos para instalar programas.

Gracias.

leogtz

En el caso de Windows XP, hay alguna smaneras de sacar que sistema es :

C:\>systeminfo | findstr /r "XP"
Nombre del sistema operativo:              Microsoft Windows XP Professional

C:\>

ó:

C:\>wmic os get name
Name
Microsoft Windows XP Professional|C:\WINDOWS|\Device\Harddisk0\Partition1


C:\>

Ahora, esto lo pudieras unir con el codigo que te puso Novlucker:

@echo off
rem Universal Batch Operating System Detector
rem Based on work of Timo Salmi found in http://www.netikka.net/tsneti/info/tscmd004.htm
rem Writted by 0x0309
rem e-mail: 0x0309@-gmail.com (without dash)
rem version 11-3-2009 v1.1
rem Tested succesfully in:
rem  MS-DOS 5.0
rem  MS-DOS 6.0
rem  MS-DOS 6.21
rem  MS-DOS 6.22
rem  MS-DOS 7.10
rem  Windows 95 b
rem  Windows NT 4.0 Workstation
rem  Windows 98 SE
rem  Windows 2000 Server
rem  Windows XP 32 bit
rem  Windows XP 64 bit (2003 version)
rem  Windows Vista
rem  Windows 7

set isnt=false
echo.>nul & set isnt=true
if true==%isnt% goto _nt

:_dos9x
set _os_=UNKNOW
echo Test|find "Fail">nul
if errorlevel 0 if not errorlevel 1 set _os_=MSDOS5-621
if not %_os_%==UNKNOW goto _resume
ver | find.exe /i "MS-DOS" >nul
if errorlevel 0 if not errorlevel 1 set _os_=MSDOS622-710
ver | find.exe /i "Windows 95" >nul
if errorlevel 0 if not errorlevel 1 set _os_=95
ver | find.exe /i "Windows 98" >nul
if errorlevel 0 if not errorlevel 1 set _os_=98
ver | find.exe /i "Windows Millennium" >nul
if errorlevel 0 if not errorlevel 1 set _os_=ME
goto _resume

:_nt
net.exe config workstation <nul 1>&0 2>&1
if not errorlevel 0 goto _vermode
if errorlevel 1 goto _vermode
goto _nt_
:_vermode
for /f "tokens=* eol=" %%a in ('ver') do (set _os_=%%a)
goto _eval_
:_nt_
for /f "skip=4 tokens=* eol=" %%a in ('net.exe config workstation') do (
echo.%%a | find.exe /i "Windows" >nul
if errorlevel 0 if not errorlevel 1 set "_line=%%a"&goto _n_t_
)
:_n_t_
set _arg=%_line:"=%&set /a _tk=1
call :_cut %_arg%
for /f "tokens=%_tk%,* eol=" %%a in ("%_line%") do (set _os_=%%a %%b)
set "_arg="&set "_tk="&set "_line="
:_eval_
find.exe 1>nul 2>&1
if errorlevel 9009 goto _unknow
set _os_ | find.exe /i " NT"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=NT&goto _resume
set _os_ | find.exe /i " 2000"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=2000&goto _resume
set _os_ | find.exe /i " 2002"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=XP&goto _resume
set _os_ | find.exe /i " XP"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=XP&goto _resume
set _os_ | find.exe /i " 5.1"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=XP&goto _resume
set _os_ | find.exe /i " 5.2"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=XP64-2003&goto _resume
set _os_ | find.exe /i " 2003"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=2003&goto _resume
set _os_ | find.exe /i " 2008"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=2008&goto _resume
set _os_ | find.exe /i " 6.0"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=2008-VISTA&goto _resume
set _os_ | find.exe /i " Vista"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=VISTA&goto _resume
set _os_ | find.exe /i " 6.1"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=SEVEN&goto _resume
set _os_ | find.exe /i " 7"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=SEVEN&goto _resume
:_unknow
set _os_=UNKNOW
goto _resume

:_cut
set _arg=%1&shift
if /i not [%_arg%]==[Windows] (set /a _tk=%_tk%+1&goto:_cut)
goto :eof

:_resume
echo.System: %_os_%
for /f "tokens=1 delims=|" %%_ in ('wmic os get name ^| findstr /r /v "^Name"') do (
echo %%_
)
pause

Salida :
System: XP
^Z
Microsoft Windows XP Professional
Presione una tecla para continuar . . .


Windows 2000 no lo he usado :(

Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Novlucker

Si logras entender el wmic que utiliza Leo, puedes sacarle mucho jugo, el problema es que esta presente desde win XP y server 2003, por lo que en el 2k no debería de estar  :-\
La otra contra es que necesitas privilegios para poder acceder, aunque algunas veces puede no estar deshabilitado  :-\(debería de estarlo a nivel empresarial)

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

0x0309

#5
aquí adapté el código, para que identifique el xp.


@echo off
rem Universal Batch Operating System Detector
rem Based on work of Timo Salmi found in http://www.netikka.net/tsneti/info/tscmd004.htm
rem Writted by 0x0309
rem e-mail: 0x0309@-gmail.com (without dash)
rem version 13-4-2009 v1.1.1
rem Tested succesfully in:
rem  MS-DOS 5.0
rem  MS-DOS 6.0
rem  MS-DOS 6.21
rem  MS-DOS 6.22
rem  MS-DOS 7.10
rem  Windows 95 b
rem  Windows NT 4.0 Workstation
rem  Windows 98 SE
rem  Windows 2000 Server
rem  Windows XP 32 bit
rem  Windows XP 64 bit (2003 version)
rem  Windows Vista
rem  Windows 7

set isnt=false
echo.>nul & set isnt=true
if true==%isnt% goto _nt

:_dos9x
set _os_=UNKNOW
echo Test|find "Fail">nul
if errorlevel 0 if not errorlevel 1 set _os_=MSDOS5-621
if not %_os_%==UNKNOW goto _resume
ver | find.exe /i "MS-DOS" >nul
if errorlevel 0 if not errorlevel 1 set _os_=MSDOS622-710
ver | find.exe /i "Windows 95" >nul
if errorlevel 0 if not errorlevel 1 set _os_=95
ver | find.exe /i "Windows 98" >nul
if errorlevel 0 if not errorlevel 1 set _os_=98
ver | find.exe /i "Windows Millennium" >nul
if errorlevel 0 if not errorlevel 1 set _os_=ME
goto _resume

:_nt
net.exe config workstation <nul 1>&0 2>&1
if not errorlevel 0 goto _vermode
if errorlevel 1 goto _vermode
goto _nt_
:_vermode
for /f "tokens=* eol=" %%a in ('ver') do (set _os_=%%a)
goto _eval_
:_nt_
for /f "skip=4 tokens=* eol=" %%a in ('net.exe config workstation') do (
echo.%%a | find.exe /i "Windows" >nul
if errorlevel 0 if not errorlevel 1 set "_line=%%a"&goto _n_t_
)
:_n_t_
set _arg=%_line:"=%&set /a _tk=1
call :_cut %_arg%
for /f "tokens=%_tk%,* eol=" %%a in ("%_line%") do (set _os_=%%a %%b)
set "_arg="&set "_tk="&set "_line="
:_eval_
find.exe 1>nul 2>&1
if errorlevel 9009 goto _unknow
set _os_ | find.exe /i " NT"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=NT&goto _resume
set _os_ | find.exe /i " 2000"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=2000&goto _resume
set _os_ | find.exe /i " 2002"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=XP&goto _resume
set _os_ | find.exe /i " XP"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=XP&goto _resume
set _os_ | find.exe /i " 5.1"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=XP&goto _resume
set _os_ | find.exe /i " 5.2"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=XP64-2003&goto _resume
set _os_ | find.exe /i " 2003"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=2003&goto _resume
set _os_ | find.exe /i " 2008"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=2008&goto _resume
set _os_ | find.exe /i " 6.0"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=2008-VISTA&goto _resume
set _os_ | find.exe /i " Vista"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=VISTA&goto _resume
set _os_ | find.exe /i " 6.1"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=SEVEN&goto _resume
set _os_ | find.exe /i " 7"  >nul 2>&1
if errorlevel 0 if not errorlevel 1 set _os_=SEVEN&goto _resume
:_unknow
set _os_=UNKNOW
goto _resume

:_cut
set _arg=%1&shift
if /i not [%_arg%]==[Windows] (set /a _tk=%_tk%+1&goto:_cut)
goto :eof

:_resume
echo.%_os_% | find.exe /i "XP" >nul
if not errorlevel 0 goto _resume_
if errorlevel 1 goto _resume_
systeminfo.exe 2>nul | find.exe /i "Microsoft Windows" | find.exe /i "Professional" >nul
if errorlevel 0 if not errorlevel 1 set _os_=XP_PROFESSIONAL&goto _resume_
systeminfo.exe 2>nul | find.exe /i "Microsoft Windows" | find.exe /i "Home" >nul
if errorlevel 0 if not errorlevel 1 set _os_=XP_HOME&goto _resume_

:_resume_
echo.System: %_os_%

pause