Autor
|
Tema: [Batch] Problema al leer múltiples niveles de subdirectorios (Leído 3,709 veces)
|
z3nth10n
Desconectado
Mensajes: 1.583
"Jack of all trades, master of none." - Zenthion
|
Hola buenas, Tengo un pequeño problema con Batch.... Estaba investigando una cosa para hacer un minisnippet de un programa que muestra cuantas lineas tiene x source code, y vi un tema http://foro.elhacker.net/scripting/recorrer_directorios_y_generar_log_batch-t332054.0.htmlPara recorrer todas las subcarpetas de un directorio y así no tener que estar metiendo todas las subcarpetas a mano... Así que he hecho 3 ciclo fors, y los problemas son: - Que el ciclo lo recorre doblemente - No hay ningún script que lo haga todo mas compacto sin tener que estar haciendo 40 ciclos fors para recorrer 40 subcarpetas? ::cloc-1.60.exe "C:\Users\Alvaro\Documents\Dropbox2\Dropbox\Game Unity3D\Assets\resources\src\CoherentNoise" ::set carpeta="C:\Users\Alvaro\Documents\Dropbox2\Dropbox\Game Unity3D\Assets\resources\src" For /F "Tokens=*" %%a in (' dir /B /S /A:D "C:\Users\Alvaro\Documents\Dropbox2\Dropbox\Game Unity3D\Assets\resources\src"' ) do ( ::echo Explorando carpeta "%%a" echo Carpeta: " %%a" >> " %archivo%" cloc-1.60.exe "%%a" >> "%archivo%" For /F "Tokens=*" %%b in (' dir /B /S /A:D " %%a"' ) do ( ::echo Explorando carpeta "%%b" echo Carpeta: " %%b" >> " %archivo%" cloc-1.60.exe "%%b" >> "%archivo%" For /F "Tokens=*" %%c in (' dir /B /S /A:D " %%b"' ) do ( ::echo Explorando carpeta "%%c" echo Carpeta: " %%c" >> " %archivo%" cloc-1.60.exe "%%c" >> "%archivo%" ) ) ) cls echo Proceso terminado, gracias por usar CLOC.
Log generado: http://pastebin.com/tUwkVcA1Como podéis observar algunas carpetas están duplicadas, es más, con el Sublime Text, pasandole el Sort Unique, me borra la mitad de ese log... Un saludo. PD: Por si sirviese el dato, tengo un W7...
|
|
« Última modificación: 26 Diciembre 2013, 15:13 pm por Ikillnukes »
|
En línea
|
⏩ Interesados hablad por Discord.
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Has adaptado mal el ejemplo que tomaste de mi antiguo usuario "@ pitoloko" 1. Estas usando 3 FOR anidados y la función de los 3 es recorrer subdirectorios, sin permitir que el primer FOR termine de procesar todos los subdirectorios, óbviamente se van a procesar más veces de las deseadas. 2. set carpeta="C:\Users\Alvaro\Documents\Dropbox2\Dropbox\Game Unity3D\Assets\resources\src" En Batch sólamente debes colocar las comillas dobles después del símbolo =, en casos especiales, pero este no es uno de esos casos. 3. ::echo Explorando carpeta "%%a" La mala costumbre técnica de usar un doble operador :: como reemplazamiento de linea de comentario (REM), no se debe usar dentro del bloque de un búcle, por precaución. SET "Directory= %UserProfile%\Documents\Dropbox2\Dropbox\Game Unity3D\Assets\resources\src" SET "OutputFile= %WorkingDir%\mi_juego.log" ( Echo: Carpeta: " %%~ @" | MORE Start /W "Count Lines Of Code" "%WorkingDir%\cloc-1.60.exe" "%%~@" ) )>"%OutputFile%" Echo: Proceso terminado, gracias por usar CLOC.
Saludos
|
|
« Última modificación: 26 Diciembre 2013, 15:39 pm por ElektroSoft »
|
En línea
|
|
|
|
z3nth10n
Desconectado
Mensajes: 1.583
"Jack of all trades, master of none." - Zenthion
|
El error 2 y 3 me lo vas a tener que disculpar, ya que llevo bastante tiempo sin programar Batch, y pues bueno, si recordaba que me dijiste hace tiempo que no era buena idea usar :: en algún sitio, pero y no lo recordaba...
Y por cierto... No se lo que ha pasado, que cloc-1.60.exe no me lo reconoce, y está en la misma carpeta... :/
Un saludo.
|
|
« Última modificación: 26 Diciembre 2013, 15:40 pm por Ikillnukes »
|
En línea
|
⏩ Interesados hablad por Discord.
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
No se lo que ha pasado, que cloc-1.60.exe no me lo reconoce, y está en la misma carpeta... :/ Se debe a que en el código modifico la ruta del directorio de trabajo actual, ya lo he corregido en el código de arriba Saludos
|
|
|
En línea
|
|
|
|
z3nth10n
Desconectado
Mensajes: 1.583
"Jack of all trades, master of none." - Zenthion
|
Se debe a que en el código modifico la ruta del directorio de trabajo actual, ya lo he corregido en el código de arriba
Saludos
Era suponible, pero no sabía como arreglarlo... Gracias de nuevo por tu ayuda ElektroSoft PD: Lo que no recuerdo es como arrancar la app en modo oculto (segundo plano), es un poco molesto, ya que la app, tarda unos segundos en calcular todo, y se spamea todo de ventanas de CMD que se ocultan al segundo.... Estoy buscando, pero como siempre no encuentro nada... :/ PD: Usando /MIN pues vale, pero quiero que no se vea ni en el explorador, y eso si que no lo encuentro... :/
|
|
« Última modificación: 26 Diciembre 2013, 15:48 pm por Ikillnukes »
|
En línea
|
⏩ Interesados hablad por Discord.
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Si me permites la pregunta... ¿Porque no haces la aplicación en .NET?. No entiendo porque motivo pretendes ocultar el proceso explorer.exe (si es que he entendido bien y eso es lo que pretendes hacer, que tampoco lo sé) pero en ese caso puedes usar VBNET/C#, pero Batch no, como tampoco puedes valerte de Batch para ejecutar una instancia de la CMD en modo oculto, aunque si puedes escribir un archivo VBS que ejecute el script bat/cmd en modo oculto o usar algún programa de terceros para convertir el script a executable (oculto), pero como ya te digo ...sabiendo manejar .NET no creo que debas recurrir ni a Batch ni a VBS para la tarea, yo sería lo último que haría xD, no cuesta nada escribir una mini-aplicación en VBNET que haga estas cosas, aún así ...aquí tienes el script para iniciar un script en la CMD en modo oculto: Run_Hidden.vbs' Run Hidden Process ' By Elektro H@cker Process = """" & WScript.Arguments(0) & """" Arguments = null For X = 1 to WScript.Arguments.Count - 1 Arguments = Arguments & " " & _ """" & WScript.Arguments(X) & """" Next WScript.CreateObject("WScript.Shell").Run _ Process & " " & Arguments, 0, False Wscript.Quit
EDITO: Y para ocultar un proceso (las ventanas del explorer) usando Batch, puedes utilizar la aplicación de terceros NirCMD y/o también CMDOW. Saludos
|
|
« Última modificación: 26 Diciembre 2013, 16:02 pm por ElektroSoft »
|
En línea
|
|
|
|
z3nth10n
Desconectado
Mensajes: 1.583
"Jack of all trades, master of none." - Zenthion
|
Prefiero Batch por lo que ya te he comentado en Skype... Y he arreglado el problema, lo gracioso aquí, es que no funciona, porque estaba probando con una carpeta que no tenía más subcarpetas... Era solo un archivo lo que contenía.... Es más... Seguramente, si le pongo una carpeta que tenga subcarpetas, pase direactmente a leer las subcarpetas...
Es más, lo acabo de comprobar.... Como puedo solventar este error? SET "Directory= %UserProfile%\Documents\Dropbox2\Dropbox\Game Unity3D\Assets\resources\src\CoherentNoise" SET "OutputFile= %WorkingDir%\mi_juego.log" Echo Comenzando a leer. > " %OutputFile%" Echo ========================== >> " %OutputFile%" ( Echo Carpeta: " %%~ @" >> " %OutputFile%" "%WorkingDir%\cloc-1.60.exe" "%%~@" >> "%OutputFile%" Echo ========================== >> " %OutputFile%" ) ) Echo Proceso terminado, gracias por usar CLOC. >> " %OutputFile%" CLS Echo Proceso terminado, gracias por usar CLOC.
Un saludo.
|
|
|
En línea
|
⏩ Interesados hablad por Discord.
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.878
|
Como puedo solventar este error? No se le puede denominar Error, por pura lógica si utilizas un método para leer subdirectorios en "X" directorio, no esperes que la directorio Root se vaya a procesar... puesto que no es un subdirectorio. ¿Solución?, primero procesas la carpeta de origen, y luego procesas las subcarpetas con el método que has aprendido. O bien subes un nivel de directorio para que el directorio que deseas procesar, se procese como un subdirectorio más. Saludos!
|
|
« Última modificación: 26 Diciembre 2013, 17:16 pm por ElektroSoft »
|
En línea
|
|
|
|
z3nth10n
Desconectado
Mensajes: 1.583
"Jack of all trades, master of none." - Zenthion
|
¿Solución?, primero procesas la carpeta de origen, y luego procesas las subcarpetas con el método que has aprendido.
Exactamente he hecho eso, pero la cosa, es que no sabía si se podía complementar a PUSHD, pero ya veo que no...
|
|
|
En línea
|
⏩ Interesados hablad por Discord.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Batch] Ejecutar multiples procesos
Scripting
|
EagleOneRaptor
|
5
|
7,512
|
9 Mayo 2009, 07:08 am
por leogtz
|
|
|
Borrar solo subdirectorios sin saber nombre [Batch]
Scripting
|
Dany3j
|
6
|
7,043
|
29 Julio 2011, 03:48 am
por Dany3j
|
|
|
un if con cálculos múltiples[BATCH]
Scripting
|
trolleoatodos
|
4
|
3,335
|
21 Agosto 2013, 14:14 pm
por trolleoatodos
|
|
|
[BATCH] Copiar un archivo y pegarlo en todos los subdirectorios
Scripting
|
Xpolze
|
9
|
8,352
|
23 Noviembre 2013, 00:12 am
por Almapa
|
|
|
batch para recorrer todos los subdirectorios y renombrar archivos
Scripting
|
alecam987
|
1
|
9,423
|
28 Noviembre 2013, 18:07 pm
por Eleкtro
|
|