Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: PUCH84 en 24 Abril 2014, 16:00 pm



Título: Como puedo arrastrar y concatenar archivos de texto en un BATCH
Publicado por: PUCH84 en 24 Abril 2014, 16:00 pm
Hola,

tengo un script mega sencillo que me ayuda para concatenar archivos de texto ordenados simplemente ejecutandolo. Sería este:

Código:
@Echo OFF

copy/B "*.txt" "script_total.txt"

Exit

La pega es que concantenaría todos los ficheros de txt presentes en el directorio y querría hacerlo sólo los ficheros que yo le indicara, había pensado intentar arrastrarlo al .bat para simplificarlo, he encontrado info en varios hilos del foro pero no consigo concretarlo...


Para poder arrastrar el fichero al icono del .bat he leido este ejemplo de otro hilo que me permite arrastrar y ver la ruta de un archivo:

Código:
@Echo OFF
:: Para un solo archivo:
REM If NOT "%~1"=="" (echo %~1 >> file.txt )
 
:: Para un conjunto de archivos:
If NOT "%~1"=="" (echo %* >> file.txt )
 
Exit

Pero no consigo unir los dos códigos para que me funcione correctamente, alguien me podría echar una mano?

Muchas gracias, un saludo


Título: Re: Como puedo arrastrar y concatenar archivos de texto en un BATCH
Publicado por: Eleкtro en 24 Abril 2014, 17:11 pm
Un ejemplo para arrastrar y soltar archivos a la consola:

[Batch] [Aporte] (O eso creo xD) Consola de reciclaje v1.0 By Elektro (http://foro.elhacker.net/buscador-t352556.0.html)

Si los quieres "concatenar" de forma más interna, solo debes cambiar/adaptar el patrón de búsqueda del comando Copy...

Código:
copy /A "*NombreParcial*.txt" "script_total.txt"

o:

Código:
copy /A "Nombre Completo 1.txt"+"Nombre Completo 2.txt" "script_total.txt"

Saludos


Título: Re: Como puedo arrastrar y concatenar archivos de texto en un BATCH
Publicado por: PUCH84 en 24 Abril 2014, 17:28 pm
Gracias por responder Elektro, estoy revisando el código que indicas y parece un poco complicaete, estuve viendo que el tema de arrastrar a la consola parece más complicado no? yo con arrastrar al icono del batch me conformo que es lo que estuve viendo en el 2º ejemplo que puse.

El problema es que no sé como tratar los argumentos que introduzco al arrastrar para que luego el copy me funcione...


EDITO:

He llegado a esta conclusión para 3 archivos y hace lo que quiero, pero no estoy muy familiarizado con bucles en BATCH, como podría hacerlo para todos los casos?

Código:
@Echo OFF
copy/B %~nx1+%~nx2+%~nx3 "script_final.txt"
pause
Exit


Título: Re: Como puedo arrastrar y concatenar archivos de texto en un BATCH
Publicado por: Eleкtro en 24 Abril 2014, 19:11 pm
En Batch puedes pasar 255 argumentos, pero solo 9 de ellos se pueden usar (%1-%9), para seguir usando el resto de argumentos necesitas usar el comando SHIFT para desplazar a la izquierda el última argumento (%8<<%9<<%10), y así sucesivamente hasta terminar con los argumentos que pasaste.

Lo considero una completa pérdida de tiempo porque Batch es así de simple, la simpleza es el peor de sus defectos y esto lo convierte en una herramienta en la que es necesario invertir demasiado tiempo para escribir el código para realizar una tarea que debería ser simple y así lo es en cualquier otro lenguaje, así que para no perder el tiempo, te escribiré una solución en VBS:

Código
  1. ' La ruta del archivo de texto plano resultante.
  2. TextFile = ".\CombinedTextFiles.Txt"
  3.  
  4. ' Constante que indica al método que se precisa abrir el archivo para leerlo.
  5. Const ReadText = 1
  6.  
  7. ' Constante que indica al método que se precisa abrir el archivo para añadir texto.
  8. Const AppendText = 8
  9.  
  10. ' Instancio el objeto que contiene los métodos de lectura/escritura.
  11. set objFSO = CreateObject("Scripting.FileSystemObject")
  12.  
  13. ' Iteración de argumentos.
  14. For Each Arg In WScript.Arguments
  15.  
  16.    ' Obtengo y combino el contenido de texto de los archivos pasados como argumento.
  17.    CombinedText = CombinedText & vbNewLine &  _
  18.                   objFSO.OpenTextFile(Arg, ReadText, False).ReadAll
  19.  
  20. Next
  21.  
  22. ' Abro/Creo el archivo resultante para su posterior escritura.
  23. set objTextFile = objFSO.OpenTextFile(TextFile, AppendText, True)
  24.  
  25. ' Agrego el texto de los archivos combinados al archivo resultante.
  26. objTextFile.WriteLine(CombinedText)
  27.  
  28. ' Libero el objeto.
  29. objTextFile.Close
  30.  
  31. ' Código de salida satisfactorio.
  32. Wscript.Quit(0)

Saludos


Título: Re: Como puedo arrastrar y concatenar archivos de texto en un BATCH
Publicado por: PUCH84 en 27 Abril 2014, 23:49 pm
Hola Elektro

gracias por contestar, tengo poca idea de VBscripting, el procedimiento para ese código como sería? Lo guardo como .vbs supongo no? como le introduzco los argumentos?

He probado a arrastrar los archivos al icono que era lo que quería hacer en BATCH pero no me funciona, en cambio ejecutándolo con doble click sí me genera el fichero CombinedTextFiles vacío.



Un saludo.


Título: Re: Como puedo arrastrar y concatenar archivos de texto en un BATCH
Publicado por: Eleкtro en 28 Abril 2014, 08:00 am
He probado a arrastrar los archivos al icono que era lo que quería hacer en BATCH pero no me funciona, en cambio ejecutándolo con doble click sí me genera el fichero CombinedTextFiles vacío.
Lo que ocurre es que al arrastrar y soltar archivos en el icono, el directorio de trabajo actual del Script cambia a "C:\Windows\System32", y el archivo combinado se crea en ese directorio, debes asignar la ruta correcta.

Reemplaza:
Citar
Código:
TextFile = ".\CombinedTextFiles.Txt"

Por:
Código:
TextFile = "C:\CombinedTextFiles.Txt"

O por:
Código:
TextFile = Replace(WScript.ScriptFullName, WScript.ScriptName, "") & "CombinedTextFiles.Txt"
Nota: Eso indica el directorio donde se encuentra el Script.vbs, como cuando haces doble click en el archivo.

Saludos


Título: Re: Como puedo arrastrar y concatenar archivos de texto en un BATCH
Publicado por: PUCH84 en 28 Abril 2014, 09:49 am
Joder muchas gracias funciona perfecto! eres el amo :)

Un saludo