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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Batch] Buscar carpeta donde se encuentra un portable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Batch] Buscar carpeta donde se encuentra un portable  (Leído 3,763 veces)
ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
[Batch] Buscar carpeta donde se encuentra un portable
« en: 19 Noviembre 2012, 04:06 am »

Buenas, por motivos un tanto raros he creado este script. Mi duda mas bien es para optimizar el codigo a algo que seguramente se pueda hacer mas sencillo que todo el codigo que he usado, y que ahora pongo.

Principalmente sirve para localizar la instalacion de un programa portable, en este caso VirtualDub.

Código
  1. @echo off
  2.  
  3. :: Nos situamos en la siguiente carpeta
  4.  
  5. cd /d "%homedrive%\Program Files (x86)"
  6.  
  7. :Listamos directorios de la carpeta actual y comprobamos si se encuentra Virtualdub en ella
  8.  
  9. dir /b > "%temp%\info_vdub.txt"
  10.  
  11. ::Buscamos coincidencia de string, creamos un archivo de texto para valernos del mensaje de errorlevel.
  12.  
  13. Find /i "virtualdub" < "%temp%\info_vdub.txt" > "%temp%\StringCheck.txt"
  14.  
  15. If %ERRORLEVEL% == 0 (
  16. set "x86=true"
  17. ) else (
  18. set "x86=false"
  19. )
  20. ::Borramos archivos temporales
  21.  
  22. del "%temp%\StringCheck.txt"
  23. del "%temp%\info_vdub.txt"
  24.  
  25. set "path_x86=%cd%"
  26.  
  27. :: Nos situamos en la siguiente carpeta y hacemos mas de lo mismo
  28.  
  29. cd /d "%homedrive%\Program Files"
  30.  
  31.  
  32. dir /b > "%temp%\info_vdub.txt"
  33.  
  34. Find /i "virtualdub" < "%temp%\info_vdub.txt" > "%temp%\StringCheck.txt"
  35.  
  36. If %ERRORLEVEL% == 0 (
  37.  
  38. set "x64=true"
  39. ) else (
  40. set "x64=false"
  41. )
  42.  
  43. ::Borramos archivos temporales
  44.  
  45. del "%temp%\StringCheck.txt"
  46. del "%temp%\info_vdub.txt"
  47.  
  48. set "path_x64=%cd%"
  49.  
  50. ::Info en pantalla
  51.  
  52. Echo VirtualDub esta instalado en:
  53.  
  54. if "%x86%"=="true" (
  55.  
  56. echo %path_x86%
  57. )
  58.  
  59. if "%x64%"=="true" (
  60.  
  61. echo %path_x64%
  62.  
  63. )
  64.  


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: [Batch] Buscar carpeta donde se encuentra un portable
« Respuesta #1 en: 19 Noviembre 2012, 13:40 pm »


Hombre, es un tema delicado teniendo en cuenta que el ejecutable/carpeta en realidad podría tener cualquier nombre modificado, en ese caso yo buscaría el nombre "virtualdub.exe" o "vdub.exe" (No recuerdo como era) en TODO el disco duro,
Pero por otro lado es muy retorcido que alguien le vaya a cambiar el nombre... así que voy a guiarme por tu script.

El script está bien, y veo progresos por tu parte porque no hay nada mal en el código, por otro lado es un código más sencillo de los que solias tener dudas xD.

Citar
Mi duda mas bien es para optimizar el codigo a algo que seguramente se pueda hacer mas sencillo que todo el codigo que he usado,
El script se puede optimizar insignificativamente saltando la parte "x86" si el equipo es de 64 bit, pero eso no lo voy a hacer.
Se puede simplificar todo en general, mucho, haciendo un mejor uso de la sintaxis, operadores y argumentos, se puede simplificar tanto que me ha salido una función xD:

Código
  1. @echo off
  2. REM By Elektro H@cker
  3.  
  4. :: Modo de empleo:
  5. Call :APPSearch "Virtual Dub Mod"
  6. REM Echo %Errorlevel% | MORE
  7.  
  8. Call :APPSearch "Programa inexistente"
  9. REM Echo %Errorlevel% | MORE
  10.  
  11. Pause&Exit
  12. :: : :: :: :: :: :: :: :: :: :: :: ::
  13.  
  14. :APPSearch
  15. (
  16. DIR /B /AD "%PROGRAMFILES%\%~1"      >NUL 2>&1 && SET "PF=%PROGRAMFILES%" || (
  17. DIR /B /AD "%PROGRAMFILES(x86)%\%~1" >NUL 2>&1 && SET "PF=%PROGRAMFILES(x86)%")
  18. ) && (
  19. Echo %~1 esta instalado en:
  20. Call Echo "%%PF%%\%~1"
  21. Exit /B 0
  22. ) || (
  23. Echo %~1 no esta instalado.
  24. Exit /B 1
  25. )
  26. GOTO:EOF



Saludos


« Última modificación: 19 Noviembre 2012, 13:45 pm por EleKtro H@cker » En línea



ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: [Batch] Buscar carpeta donde se encuentra un portable
« Respuesta #2 en: 19 Noviembre 2012, 14:32 pm »

Juas, asi es mas sencillo, si señor. Si te fijas, casi lo que habia hecho era crear mi entorno en C donde me desenvuelvo mejor, porque esta sintaxis es delicada, pero sin duda gracias a ti aprendo mucho más.

Pense en buscar el ejecutable, de hecho hay scripts sencillitos, incluso vi alguno de Leo, pero era por cambiar y no buscar un archivo sino una carpeta.

Gracias Elektro ^^
En línea

ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: [Batch] Buscar carpeta donde se encuentra un portable
« Respuesta #3 en: 20 Noviembre 2012, 02:59 am »

Código:
[quote author=EleKtro H@cker link=topic=376384.msg1802310#msg1802310 date=1353328859]
:APPSearch
(
DIR /B /AD "%PROGRAMFILES%\%~1"      >NUL 2>&1 && SET "PF=%PROGRAMFILES%" || (
DIR /B /AD "%PROGRAMFILES(x86)%\%~1" >NUL 2>&1 && SET "PF=%PROGRAMFILES(x86)%")
) && (
Echo %~1 esta instalado en:
Call Echo "%%PF%%\%~1"
Exit /B 0
) || (
Echo %~1 no esta instalado.
Exit /B 1
)
GOTO:EOF



Una pregunta del codigo que no quise preguntarte pero me esta corroyendo jeje. El >nul lo utilizas para que redireccione el resultado del dir a nul, o sea para que no muestre nada en pantalla. Y el 2>&1, es para redirigir el posible error a 1, de manera que no muestre nada en pantalla. Hasta ahi creo que estoy en lo cierto, pero el uso de &, delante del 1, es porque has pasado un parametro a la etiqueta al usar call, no?? En un codigo sin usar call, seria simplemente 2>1, no? Lo del exit, es como return 0 (sin errores).

Al final te metere en nomina, aunque tocariamos a poco ¬¬'
« Última modificación: 26 Noviembre 2012, 08:19 am por ovichan » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: [Batch] Buscar carpeta donde se encuentra un portable
« Respuesta #4 en: 20 Noviembre 2012, 03:20 am »

si usas "2>1" se creará el archivo "1", para hacer referencia a una salida tienes que usar el operador "&" como en el ejemplo.

EDITO: Osea, con "1>NUL 2>&1" rediriges la misma salida (1 y 2) a "NUL".
el "1>NUL" no lo ves en mi code porque la salida por defecto es "1" así que con poner ">NUL" es suficiente.

http://ss64.com/nt/syntax-redirection.html

(Tema bloqueado hasta finalizar el tuto) Tutorial extendido de aprendizaje Batch
4.6 Operadores de desplazamiento lógico (o Redireccionamiento)


y...
Código:
Exit /B (el código de salida que quieras)

Al final te metere en nomina, aunque tocariamos a poco ¬¬'
Con poco ya me conformo pa salir de esta crisis :xD

saludos
« Última modificación: 20 Noviembre 2012, 03:26 am por EleKtro H@cker » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Buscar IP's y Apagar PC's en BATCH!!! « 1 2 »
Scripting
Hendrix 15 10,994 Último mensaje 19 Enero 2006, 19:20 pm
por Casidiablo
Donde se encuentra este post que me resulta muy interesante?
Bugs y Exploits
leucocito 4 3,001 Último mensaje 31 Diciembre 2010, 18:55 pm
por KrossPock
¿Dónde se encuentra la implementación de los headers en linux?
Programación C/C++
M3st4ng 4 4,938 Último mensaje 6 Marzo 2011, 14:58 pm
por Akai
BATCH encuentra el error
Scripting
Pirat3net 8 4,965 Último mensaje 22 Julio 2011, 04:08 am
por SuperDraco
¿Dónde se encuentra el SALT de SMF?
PHP
dimitrix 2 2,081 Último mensaje 6 Agosto 2012, 12:00 pm
por dimitrix
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines