Como puedo arrastrar y concatenar archivos de texto en un BATCH

Iniciado por PUCH84, 24 Abril 2014, 16:00 PM

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

PUCH84

Hola,

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

@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:

@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

Eleкtro

#1
Un ejemplo para arrastrar y soltar archivos a la consola:

[Batch] [Aporte] (O eso creo xD) Consola de reciclaje v1.0 By Elektro

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

copy /A "*NombreParcial*.txt" "script_total.txt"

o:

copy /A "Nombre Completo 1.txt"+"Nombre Completo 2.txt" "script_total.txt"

Saludos








PUCH84

#2
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?

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

Eleкtro

#3
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 (vb) [Seleccionar]
' La ruta del archivo de texto plano resultante.
TextFile = ".\CombinedTextFiles.Txt"

' Constante que indica al método que se precisa abrir el archivo para leerlo.
Const ReadText = 1

' Constante que indica al método que se precisa abrir el archivo para añadir texto.
Const AppendText = 8

' Instancio el objeto que contiene los métodos de lectura/escritura.
set objFSO = CreateObject("Scripting.FileSystemObject")

' Iteración de argumentos.
For Each Arg In WScript.Arguments

   ' Obtengo y combino el contenido de texto de los archivos pasados como argumento.
   CombinedText = CombinedText & vbNewLine &  _
                  objFSO.OpenTextFile(Arg, ReadText, False).ReadAll

Next

' Abro/Creo el archivo resultante para su posterior escritura.
set objTextFile = objFSO.OpenTextFile(TextFile, AppendText, True)

' Agrego el texto de los archivos combinados al archivo resultante.
objTextFile.WriteLine(CombinedText)

' Libero el objeto.
objTextFile.Close

' Código de salida satisfactorio.
Wscript.Quit(0)


Saludos








PUCH84

#4
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.

Eleкtro

#5
Cita de: PUCH84 en 27 Abril 2014, 23:49 PMHe 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:
CitarTextFile = ".\CombinedTextFiles.Txt"

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

O por:
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








PUCH84

Joder muchas gracias funciona perfecto! eres el amo :)

Un saludo