Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: SuperDraco en 12 Mayo 2011, 02:05 am



Título: (Solucionado) [Batch] ¿Como conseguir informacion de un acceso directo? (.lnk)
Publicado por: SuperDraco en 12 Mayo 2011, 02:05 am
Hola   ;D

Despues de muchos intentos fracasados y de mucho buscar, me veo obligado a preguntar... :xD

Necesito hacer un batch, y lo único que se me resiste es esta parte... en donde necesito obtener y/o mostrar de alguna manera la ruta de destino de un acceso directo, un archivo .lnk, me refiero a esto:

(http://imageshack.us/m/813/8421/prtscrcapturetz.jpg)

Esa ruta es la que necesito conseguir vía CMD...


Básicamente lo que pretendo hacer es un batch que examine los accesos directos en busca de accesos directos rotos (Por eso quiero obtener la ruta de destino o conseguir expandir el acceso directo a la ruta de destino), y eliminarlos.


He probado haciendo este batch, sabiendo que no iba a funcionar... porque la ruta que me proporciona el comando "echo",es la del "dir", pero bueno, tenía que intentarlo... ni falta decir que he probado a expandirlo con todas las formas que hay XD

Código:
@echo off
For /F "Tokens=*" %%A in ('dir /B /S "C:\prueba\*.lnk"') do (
echo %%~fA
pause
)



Tambien he probado a usar de mil maneras el rundll32 con esta API, pero los resultados han sido nulos, creo que este es el buen camino pero no se utilizarlo bien:

Código:
rundll32.exe shell32.dll,SHObjectProperties,C:\Prueba\WindowsUpdate.lnk

(Aunque de todas formas imagino que usando la api lo único que conseguiría es abrir una ventana de propiedades del archivo, cuando yo solo quiero obtener la información dentro del cmd para usar esos datos como parámetro...)


También he intentado usar el programa mediainfo (command line) para que me mostrase información acerca del acceso directo, pero nada... solo me muestra el tamaño del archivo, y tambien he probado con programas para crear accesos directos como XXMKLINK para ver si me dejaba editar un .lnk o sacarle información, pero tampoco...


¿Alguien sabe de alguna manera para conseguir lo que pido?



Espero que si!  ::) Gracias de antemano...


PD: No se si tal vez me podría servir tambien un vbscript... solamente me serviría si el vbscript diese un código "errorlevel" en mi batch... y no se si eso es posible. Para que me entendais, usando un vbs debería ser así:

Código:
@echo off
For /F "Tokens=*" %%A in ('dir /B /S "C:\prueba\*.lnk"') do (

Script para saber si la ruta de destino del acceso directo existe, o si de lo contrario el acceso directo está roto.vbs < %%A

If %errorlevel% EQU 0 echo Todo OK
If %errorlevel% GEQ 1 echo El acceso directo está roto & del /q %%A

Supongo que se ha entendido ... XD

Ojalá alguien tenga un vbs así ya echo, un batch, o cualquier cosa puf...

saludosss


Título: Re: [Batch] ¿Como conseguir informacion de un acceso directo? (.lnk)
Publicado por: Novlucker en 12 Mayo 2011, 03:08 am
Código
  1. set objshell = createobject("wscript.shell")
  2. set objlink = objshell.createshortcut(wscript.arguments(0))
  3. set objfso = createobject("scripting.filesystemobject")
  4. if objfso.fileexists(objlink.targetpath) then
  5. wscript.quit(0)
  6. else
  7. wscript.quit(1)
  8. end if

Saludos


Título: Re: [Batch] ¿Como conseguir informacion de un acceso directo? (.lnk)
Publicado por: SuperDraco en 12 Mayo 2011, 21:37 pm
Me funciona perfecto, haces que todo parezca tán fácil en VBS... XD

graciasss







este batch elimina los accesos directos rotos del menú inicio, y todas las carpetas vacias (0 bytes) ^^





Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3.  
  4.  
  5.  
  6. :Accesos directos rotos
  7.  
  8. For /F "Tokens=*" %%a in ('dir /B /S "%appdata%\Microsoft\Windows\Start Menu\Programs\*.lnk"') do (
  9. Set archivo="%%a"
  10. call :comprobar)
  11.  
  12.  
  13.  
  14. For /F "Tokens=*" %%a in ('dir /B /S "%ProgramData%\Microsoft\Windows\Start Menu\Programs\*.lnk"') do (
  15. Set archivo="%%a"
  16. call :comprobar)
  17.  
  18.  
  19.  
  20.  
  21. :Carpetas vacias
  22.  
  23. For /F "Tokens=*" %%a in ('dir /B /S /A:D "%appdata%\Microsoft\Windows\Start Menu\Programs\"') do (
  24. If %%~za EQU 0 rd /Q /S "%%a")
  25.  
  26.  
  27. For /F "Tokens=*" %%a in ('dir /B /S /A:D "%ProgramData%\Microsoft\Windows\Start Menu\Programs\"') do (
  28. If %%~za EQU 0 rd /Q /S "%%a")
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40. :Comprobar
  41. Comprobar.vbs !archivo!
  42.  
  43. If %errorlevel% EQU 0 (
  44. goto:eof
  45. ) ELSE (
  46. Del /Q /F !archivo!
  47. goto:eof
  48. )
  49.