Título: Ayuda con BAT
Publicado por: elecktra en 13 Abril 2009, 15:22 pm
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.
Título: Re: Ayuda con BAT
Publicado por: Novlucker en 13 Abril 2009, 16:25 pm
Sistema operativo: http://foro.elhacker.net/scripting/batch_detector_de_sistemas_operativos-t247905.0.html Carpeta de usuario %USERPROFILE%
tskill no acepta /IM 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
Título: Re: Ayuda con BAT
Publicado por: elecktra en 13 Abril 2009, 17:55 pm
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.
Título: Re: Ayuda con BAT
Publicado por: leogtz en 13 Abril 2009, 20:23 pm
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.
Título: Re: Ayuda con BAT
Publicado por: Novlucker en 13 Abril 2009, 20:35 pm
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
Título: Re: Ayuda con BAT
Publicado por: 0x0309 en 14 Abril 2009, 03:54 am
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
|