Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: otrebo en 18 Marzo 2012, 18:33 pm



Título: . bat que une varios txt
Publicado por: otrebo en 18 Marzo 2012, 18:33 pm
Hola amigos,

Mi duda es la siguiente: Ya en un hilo anterior habia comentado que tengo en el server un .bat "unir.bat" el cual me une varios archivos .txt y como resultado optengo el archivo total.txt

Algo como esto

10.txt
21.txt
31.txt
41.txt
51.txt
unir.bat

Donde mi archivo unir.bat contiene el siguiente comando:

@Echo OFF
PUSHD "%~DP0"
copy "*.txt" "total.txt"
POPD
Exit

El resultado que tengo en total.txt es:

linea1
linea2
linea3
linea4
linea5
...
lineax


Que debo hacer para que luego de la ultima linea no me coloque ese caracter especial que no pude pegar pero es un cuadro pequeño al final del todo.


Agradezco su gran ayuda.   Un saludo.


Título: Re: . bat que une varios txt
Publicado por: Eleкtro en 18 Marzo 2012, 18:46 pm
Código
  1. Copy /B "*.txt" "Total.txt"


PD: Deberías lere la ayuda de los comandos, Te servirá de ayuda.
Código:
Copy /?


Salu2


Título: Re: . bat que une varios txt
Publicado por: otrebo en 18 Marzo 2012, 20:06 pm
Gracias EleKtro H@cker

No tenia idea de la utilidad de /B, tan solo que debo unirlos manteniendo un orden he puesto lo siguiente y ya no tengo el resultado esperado

@Echo OFF
PUSHD "%~DP0"
copy /b "1.txt + 2.txt + 3.txt + 4.txt + 5.txt + 6.txt" " total.txt"
Exit

Tienes idea de lo que tengo mal, he intentado sin comillas y sigo igual.

Un saludo


Título: Re: . bat que une varios txt
Publicado por: Eleкtro en 18 Marzo 2012, 20:16 pm
El comando sería así:
Código
  1. copy /b "1.txt" + "2.txt" + "3.txt" + "4.txt" + "5.txt" + "6.txt" "total.txt"

(No importa con o sin comillas, Mientras los nombres de archivo no contengan espacios en el nombre)

Pero no especificas cual es el problema con el resultado que obtienes...

Si lo que quieres es añadir un espacio para que no se "pegue" al final de la línea de cada texto, puedes hacer esto:

Código
  1. Echo+ >tmp & Echo+ >>tmp
  2. copy /b "1.txt" + tmp + "2.txt" + tmp + "3.txt" + tmp + "4.txt" + tmp + "5.txt" + tmp + "6.txt" "total.txt"
  3. Del tmp >NUL


Título: Re: . bat que une varios txt
Publicado por: otrebo en 18 Marzo 2012, 21:14 pm
Gracias,

Tal como te describi, no me arrobaja el esperado total.txt, ahora si que lo arroja.

Te agradezco, puedes cerrar el hilo


Título: Re: . bat que une varios txt
Publicado por: cassiel83 en 20 Marzo 2012, 17:44 pm
Hola a todos, el copy /b funciona para archivos .txt con formato ANSI pero cuando son UTF8 el símbolo del cuadrado sigue apareciendo en medio de la unión de los dos txt.
He intendado usando el Copy /A (ascii) pero tampoco funciona, alguna idea para solucionarlo usando archivos UTF8?
Gracias de antemano.


Título: Re: . bat que une varios txt
Publicado por: Eleкtro en 20 Marzo 2012, 18:12 pm
copy /b funciona para formato ANSI pero cuando son UTF8 el símbolo del cuadrado sigue apareciendo

Hola cassiel83

Acabo de probar "Copy /B" con 3 archivos .txt con codificación utf-8 guardados desde el bloc de notas, y funciona a la perfección.

¿Lo has probado en Windows 7?

¿Estás seguro que el formato que estás usando es UTF-8?


EDITO: De todas formas si estás seguro que en tu caso por lo que séa no funciona, Puedes probar la utilidad COMBINE.exe Que también me ha funcionado.

http://www.gammadyne.com/cmdline.htm#combine

La manera de usarla es la siguiente:
Código
  1. combine Test.txt "*.txt"

No tiene muchas opciones pero a mi no me han hecho falta
Citar
COMBINE [/a] [/lb] [/nolist] [/nologo] [/nosum] [/s] target file1 file2 ...

Switches:
/a   Do not overwrite the existing contents of the target file. Instead, append to the end of the target file.
/lb   Before a source file is added to the target file, a line-break will be added to the end of the target file if one is not already present.
/nolist   Do not list each file.
/nologo   Do not display the program banner.
/nosum   Do not display the operation summary.
/s   Recursively enter subdirectories.


Título: Re: . bat que une varios txt
Publicado por: cassiel83 en 20 Marzo 2012, 20:11 pm
Hola Elektro Hacker, gracias por contestar, estoy probando el comando en xp sp3, de hecho lo he vuelto a hacer con archivos pequeños que acabo de crear y los guardo en formato UTF8, el archivo resultante es tambien un UTF8 pero sigue el problema del simbolo cuadrado en la union de los archivos. Probare esta noche en casa ya que en la oficina no tenemos windows 7.
 


Título: Re: . bat que une varios txt
Publicado por: cassiel83 en 21 Marzo 2012, 20:13 pm
Hola nuevamente como habias dicho lo he probado en windows 7 y si que funciona, los archivos son UTF8 y el archivo resultante es tambien UTF8 parece ser que en windows xp no funciona.


Título: Re: . bat que une varios txt
Publicado por: Eleкtro en 21 Marzo 2012, 21:01 pm
parece ser que en windows xp no funciona.

No creo que haya solución en tu caso.
Si no tuvieras el SP3, Quizás actualizando al SP3 se actualize esa función interna de la CMD...

Saludos


Título: Re: . bat que une varios txt
Publicado por: elqueteconte en 7 Octubre 2015, 23:09 pm
Saludos;

He heredado el siguiente script:

copy /y blancos\*.TXT .

copy CM.txt + C:\carp1\Emp1\20150908\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150908\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150908\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150908\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150908\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150908\IMP6003.txt IMP6003.txt

copy CM.txt + C:\carp1\Emp1\20150909\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150909\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150909\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150909\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150909\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150909\IMP6003.txt IMP6003.txt

copy CM.txt + C:\carp1\Emp1\20150910\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150910\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150910\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150910\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150910\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150910\IMP6003.txt IMP6003.txt

copy CM.txt + C:\carp1\Emp1\20150911\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150911\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150911\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150911\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150911\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150911\IMP6003.txt IMP6003.txt

copy CM.txt + C:\carp1\Emp1\20150912\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150912\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150912\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150912\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150912\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150912\IMP6003.txt IMP6003.txt

Como pueden ver la variable "carp1"; "Emp1" son constantes pero la carpeta siguiente corresponde a los días del mes.

La idea es como hago para que cuando ejecuto el script le pase por parámetro el nombre de la Empresa y haga un recorrido por las carpetas que y vaya haciendo la copia hasta que consiga la ultima carpeta.

Desde ya mil gracias....