Autor
|
Tema: Modificar archivo de texto sin conocer su ruta (Leído 4,471 veces)
|
KISKE
Desconectado
Mensajes: 19
|
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. @echo off del /q "%userprofile%\salida.txt" cls color 0b title Instalador @echo Bienvenido al instalador blah blah blah @echo. @echo. pause cls @echo Bienvenido al instalador blah blah blah @echo. @echo. @echo Modificando el ARCHIVO_XX.txt @echo. @echo Por favor, no cierre el programa 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 ( IF EXIST %%i:\ ( dir /b /s %%i:\ | find "ARCHIVO_XX.txt" >> "%userprofile%\salida.txt" ) ) <"%userprofile%\salida.txt" set /p "ruta=" set ruta=%ruta:ARCHIVO_XX.txt=% cd %ruta% echo. >> ARCHIVO_XX.txt echo Archivo modificado >> ARCHIVO_XX.txt del /q "%userprofile%\salida.txt" cls @echo Bienvenido al instalador blah blah blah @echo. @echo. @echo El programa ha concluido con exito. @echo. @echo. @echo. pause
Gracias!
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Conectado
Mensajes: 9.878
|
- 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: dir /b /s %%i:\ | find "ARCHIVO_XX.txt" ( 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 ( IF EXIST %%i:\ (dir /b /s " %%i:\ARCHIVO_XX.txt" >> " %userprofile%\salida.txt" ) ) )
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: saludos
|
|
|
En línea
|
|
|
|
KISKE
Desconectado
Mensajes: 19
|
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í: 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 ( IF EXIST %%i:\ ( dir /b /s %%i:\"ARCHIVO_XX.txt" >> "%userprofile%\salida.txt" ) )
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
Conectado
Mensajes: 9.878
|
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: For /F "tokens=2 delims==" %%@ in ('wmic logicaldisk get name /Format:list' ) Do ( )
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
Mensajes: 19
|
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 %%@. for /f "tokens=2 delims==" %%@ in ('wmic logicaldisk get name /Format:list') do ( IF EXIST %%@ ( dir /b /s %%@"ARCHIVO_XX.txt" >> "%userprofile%\salida.txt" ) )
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
Conectado
Mensajes: 9.878
|
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: For /F %%@ in ('wmic logicaldisk get name /Format:texttable ^| Find ":"' ) do ( (DIR /B /S " %%@\ARCHIVO_XX.txt" )>> " %userprofile%\salida.txt" )
|
|
« Última modificación: 20 Diciembre 2012, 12:02 pm por EleKtro H@cker »
|
En línea
|
|
|
|
KISKE
Desconectado
Mensajes: 19
|
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
Conectado
Mensajes: 9.878
|
Hay alguna solución para eso ? Listar únicamente los discos fijos: For /F "tokens=2" %%@ in ('wmic logicaldisk get name ^,drivetype /Format:texttable ^| Find "3"' ) do ( (DIR /B /S " %%@\ARCHIVO_XX.txt" )>> " %userprofile%\salida.txt" )
|
|
|
En línea
|
|
|
|
KISKE
Desconectado
Mensajes: 19
|
Genial, muchas gracias por todo y también gracias por las rápidas respuestas!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Modificar linea en archivo de texto
PHP
|
Riki_89D
|
4
|
4,643
|
8 Diciembre 2010, 17:11 pm
por Riki_89D
|
|
|
Ayudaaaaa no se como Modificar el contenido de una linea de un archivo de texto
Programación General
|
luiggi1990
|
0
|
2,382
|
11 Octubre 2011, 02:16 am
por luiggi1990
|
|
|
Modificar un archivo de texto
Programación C/C++
|
erest0r
|
4
|
2,410
|
28 Febrero 2014, 17:29 pm
por erest0r
|
|
|
Cómo escribir/modificar exploit RCE sin conocer el SO de la víctima?
Bugs y Exploits
|
Ethicalsk
|
2
|
3,724
|
2 Noviembre 2016, 05:23 am
por Ethicalsk
|
|
|
C - Como hacer que habra archivos de texto y pregunte la ruta del archivo?
Programación C/C++
|
n1sen
|
4
|
2,593
|
28 Julio 2017, 21:20 pm
por n1sen
|
|