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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Modificar archivo de texto sin conocer su ruta
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Modificar archivo de texto sin conocer su ruta  (Leído 4,113 veces)
KISKE

Desconectado Desconectado

Mensajes: 19



Ver Perfil
Modificar archivo de texto sin conocer su ruta
« en: 19 Diciembre 2012, 10:28 am »

Hola,
Tengo un problema, el código funciona, pero hay un cierto incoveniente, hago varias pruebas de lo mismo, y hay veces que tarda menos y otras veces más, incluso me llegó a tardar hasta 2 minutos o más.

Lo que quería saber es si hay algúna otra forma de hacer lo que estoy haciendo pero de forma más rápida.

Código
  1. @echo off
  2.  
  3. del /q "%userprofile%\salida.txt"
  4.  
  5. cls
  6.  
  7. color 0b
  8. title Instalador
  9.  
  10. @echo Bienvenido al instalador blah blah blah
  11. @echo.
  12. @echo.
  13. pause
  14.  
  15. cls
  16.  
  17. @echo Bienvenido al instalador blah blah blah
  18.  
  19. @echo.
  20. @echo.
  21.  
  22. @echo Modificando el ARCHIVO_XX.txt
  23. @echo.
  24. @echo Por favor, no cierre el programa
  25.  
  26. for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
  27. IF EXIST %%i:\ (
  28. dir /b /s %%i:\ | find  "ARCHIVO_XX.txt" >> "%userprofile%\salida.txt"
  29. )
  30. )
  31.  
  32. <"%userprofile%\salida.txt" set /p "ruta="
  33.  
  34. set ruta=%ruta:ARCHIVO_XX.txt=%
  35.  
  36. cd %ruta%
  37.  
  38. echo. >> ARCHIVO_XX.txt
  39.  
  40. echo Archivo modificado >> ARCHIVO_XX.txt
  41.  
  42. del /q "%userprofile%\salida.txt"
  43.  
  44. cls
  45.  
  46. @echo Bienvenido al instalador blah blah blah
  47. @echo.
  48. @echo.
  49. @echo El programa ha concluido con exito.
  50.  
  51. @echo.
  52. @echo.
  53. @echo.
  54.  
  55. pause


Gracias!


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Modificar archivo de texto sin conocer su ruta
« Respuesta #1 en: 19 Diciembre 2012, 15:40 pm »

- Suponiendo que tengas una unidad de diskette conectada y asociada a la letra "A", podrías descartarla del FOR, sobretodo si la diskettera está vacía, tardará un minuto en leer la diskettera y acabará saltando un mensaje de error porque no se encuentra ningún diskette dentro.


- En este comando estás esperando a una salida, y después de obtenerla, la filtras al comando find, es totálmente innecesario y hace que tarde más:
Código:
dir /b /s %%i:\ | find  "ARCHIVO_XX.txt"

Código
  1. (
  2. for %%i in (b c d e f g h i j k l m n o p q r s t u v w x y z) do (
  3. IF EXIST %%i:\ (dir /b /s "%%i:\ARCHIVO_XX.txt" >> "%userprofile%\salida.txt")
  4. )
  5. )

Aparte de lo comentado, puedes mejorar la sintaxis y simplificar el código:
- Ahorrando la orden de ocultar la salida dle echo todo el rato... @echo., usa "echo.", sin la arroba,
- Creando un FOR que solo trabaje en las unidades que exiten conectadas:
Código:
fsutil fsinfo drives

saludos


En línea

KISKE

Desconectado Desconectado

Mensajes: 19



Ver Perfil
Re: Modificar archivo de texto sin conocer su ruta
« Respuesta #2 en: 19 Diciembre 2012, 19:46 pm »

Excelenteee!
Gracias por los consejos, ya borré todos los @ de los echo.

Sin embargo, no supe como trabajar con el fsutil fsinfo drives, pero seguiré intentando.

El bucle me quedo así:
Código
  1. for %%i in (b c d e f g h i j k l m n o p q r s t u v w x y z) do (
  2. IF EXIST %%i:\ (
  3. dir /b /s %%i:\"ARCHIVO_XX.txt" >> "%userprofile%\salida.txt"
  4. )
  5. )

Si las comillas incluían a la ruta (%%i:\) lanzaba un error, es por eso que solo se lo puse al nombre del archivo.


Muchas gracias nuevamente!
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Modificar archivo de texto sin conocer su ruta
« Respuesta #3 en: 19 Diciembre 2012, 20:08 pm »

no supe como trabajar con el fsutil fsinfo drives, pero seguiré intentando.
Bueno lo cierto es que el output de FSUTIL es una línea y necesitarías averiguar cuantos tokens debes crear en el FOR, mejor puedes hacerlo usando WMIC para obtener una un output multi-línea:

Código
  1. For /F "tokens=2 delims==" %%@ in ('wmic logicaldisk get name /Format:list') Do (
  2. echo %%@
  3. )

Si las comillas incluían a la ruta (%%i:\) lanzaba un error, es por eso que solo se lo puse al nombre del archivo
Es extraño, a mi me funcionó correctamente (¿Lo probaste en Win7?, ahí funciona)
En línea

KISKE

Desconectado Desconectado

Mensajes: 19



Ver Perfil
Re: Modificar archivo de texto sin conocer su ruta
« Respuesta #4 en: 20 Diciembre 2012, 09:32 am »

Gracias nuevamente, aunque tengo un pequeño problema que no sé como resolverlo.
El parámetro %%@ devuelve las rutas pero solo con el formato LETRA:, es decir, la / no la inserta, y sin eso, no puedo continuar.

No soy muy bueno en Batch por lo que no pude resolver el problema, el código quedo así pero como dije, falta la / después de %%@.

Código
  1. for /f "tokens=2 delims==" %%@ in ('wmic logicaldisk get name /Format:list') do (
  2. IF EXIST %%@ (
  3. dir /b /s %%@"ARCHIVO_XX.txt" >> "%userprofile%\salida.txt"
  4. )
  5. )


Por cierto, si, lo probé en Windows7, y sin embargo la " no puede incluír a la ruta porque me lanza error, no sé cual será el motivo, pero así me funciona.


Gracias!
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Modificar archivo de texto sin conocer su ruta
« Respuesta #5 en: 20 Diciembre 2012, 11:59 am »

El "If Exists" que has añadido es innecesario, como te expliqué el comanod que utilizo del wmic sirve para obtener las unidades conectadas, osea las unidades que existen...

Te da ese tipo de error con los caracteres porque la salida del comando wmic está en unicode por defecto,
debí haber previsto que podrías tener problemas para la intención que quieres darle al usar el formato "list".

Aquí tienes:
Código
  1. For /F %%@ in ('wmic logicaldisk get name /Format:texttable ^| Find ":"') do (
  2.    (DIR /B /S "%%@\ARCHIVO_XX.txt")>> "%userprofile%\salida.txt"
  3. )
  4. Pause&Exit
« Última modificación: 20 Diciembre 2012, 12:02 pm por EleKtro H@cker » En línea

KISKE

Desconectado Desconectado

Mensajes: 19



Ver Perfil
Re: Modificar archivo de texto sin conocer su ruta
« Respuesta #6 en: 20 Diciembre 2012, 12:56 pm »

Funcionó perfectamente, aunque creo que tiene un error.

Cuando explora el primer disco (en mi caso C:/, que es donde está el ARCHIVO_XX.txt), no pasa nada y hace todo correctamente, pero luego saltan dos errores en la consola y dice lo siguiente:

El dispositivo no está listo.
El dispositivo no está listo.

Si no me equivoco se refiere a los discos E:/ y F:/ que son unidades de CD y no tengo ningún CD dentro.

Hay alguna solución para eso ?


Gracias!
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Modificar archivo de texto sin conocer su ruta
« Respuesta #7 en: 20 Diciembre 2012, 13:49 pm »

Hay alguna solución para eso ?
Listar únicamente los discos fijos:

Código
  1. @echo off
  2. For /F "tokens=2" %%@ in ('wmic logicaldisk get name^,drivetype /Format:texttable ^| Find "3"') do (
  3. (DIR /B /S "%%@\ARCHIVO_XX.txt")>> "%userprofile%\salida.txt"
  4. )
  5. Pause&Exit
En línea

KISKE

Desconectado Desconectado

Mensajes: 19



Ver Perfil
Re: Modificar archivo de texto sin conocer su ruta
« Respuesta #8 en: 20 Diciembre 2012, 15:35 pm »

Genial, muchas gracias por todo y también gracias por las rápidas respuestas!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines