Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: ovichan en 19 Noviembre 2012, 04:06 am



Título: [Batch] Buscar carpeta donde se encuentra un portable
Publicado por: ovichan 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.  


Título: Re: [Batch] Buscar carpeta donde se encuentra un portable
Publicado por: Eleкtro 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

(http://img842.imageshack.us/img842/3126/captura4w.png)

Saludos


Título: Re: [Batch] Buscar carpeta donde se encuentra un portable
Publicado por: ovichan 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 ^^


Título: Re: [Batch] Buscar carpeta donde se encuentra un portable
Publicado por: ovichan 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 ¬¬'


Título: Re: [Batch] Buscar carpeta donde se encuentra un portable
Publicado por: Eleкtro 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) (http://foro.elhacker.net/scripting/tema_bloqueado_hasta_finalizar_el_tuto_tutorial_extendido_de_aprendizaje_batch-t375135.0.html;msg1797941#msg1797941)

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