Acciones sobre archivos de texto. [Batch]

Iniciado por leogtz, 24 Enero 2009, 00:30 AM

0 Miembros y 4 Visitantes están viendo este tema.

Demente117

PERDON por si me equivoko otra vez

documento original lo kreo haciendo un bat
@echo off
dir /b /s>Peliculas.txt
lo ejecuto en la raiz de mi disco duro y me sale la lista que quiero,

H:\Peliculas\El asesino del calendario .film
H:\Peliculas\El guerrero n§ 13 .film
H:\Peliculas\Harry Potter 7 .film
H:\Peliculas\Ip man (Maestro y mentor de Bruce Lee) .film
H:\Peliculas\Jugar duro .film
H:\Peliculas\La Dama del Lago .film
H:\Peliculas\La Saga Crepusculo .film
H:\Peliculas\Mongol .film
H:\Peliculas\Resacon 2 .film
H:\Peliculas\A\Algo pasa en las Vegas .film
H:\Peliculas\A\Ali G         Anda suelto .film
H:\Peliculas\A\Almas Condenadas .film
H:\Peliculas\A\Amores Perros .film
H:\Peliculas\A\Ana Karenina .film
H:\Peliculas\A\Analfabeto .film
H:\Peliculas\A\Angeles Caidos .film
H:\Peliculas\A\Aprendiz de Brujo .film
H:\Peliculas\A\Aprendiz de Caballero .film


pero me gustaria que kedara asi


El asesino del calendario .film
El guerrero n§ 13 .film
Harry Potter 7 .film
Ip man (Maestro y mentor de Bruce Lee) .film
Jugar duro .film
La Dama del Lago .film
La Saga Crepusculo .film
Mongol .film
Resacon 2 .film
Algo pasa en las Vegas .film
Ali G         Anda suelto .film
Almas Condenadas .film
Amores Perros .film
Ana Karenina .film
Analfabeto .film
Angeles Caidos .film
Aprendiz de Brujo .film
Aprendiz de Caballero .film


quitando todas rutas de mis carpetas, mi problema es ese mismo
tengo mi disco duro con una carpeta dentro que pone peliculas, y dentro de esta
distribuida asi

Peliculas
//
0-9
0-9 Dibujos
A
A Dibujos
B
B Dibujos


y mi segunda pregunta era esta
@echo off
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type Peliculas.txt') do (
set linea=%%x
set linea=!linea:.avi.mpg.mp4.mpeg.mkv.film=!
call :show !linea!
)
:show
echo. %* >> Peliculas3.txt
perdon si me vuelvo a equivocar y no es esto lo que me estavas preguntando

leogtz

No, no es lo que te estaba diciendo, cuando uno se registra en un foro, debe de leerse las reglas del foro, y del subforo. Pero bueno, te la paso por esta vez, para la otra simplemente tu mensaje se eliminará.

Lo que te pedía es que el código debe de ponerse con su debido formato:

echo hola
Utilizando el GeSHi del editor de mensajes quedaría así:

Código (dos) [Seleccionar]
echo hola

Respecto al código, se puede utilizar algo así:

Código (dos) [Seleccionar]
@echo off
for /r c:\users\leo\batch\Peliculas %%_ in (*.*) do (
echo "%%~nx_"
)


Siendo "c:\users\leo\batch\Peliculas" lo que tienes que cambiar a a la ruta donde están tus películas.

Sobre tu segunda duda, no, no se puede, tienes que hacerlo uno por uno. Pon un ejemplo y lo resolvemos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Demente117

Gracias, muchas gracias Leo, si funciona, ala perfeccion muxisimas gracias

perdon por mi ignorancia voy a leerme las normas, espero preguntar algo correctamente a la proxima. (si vuelvo a necesitar ayuda) de nuevo MUXISIMAS GRACIAS

leogtz

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Dany3j

Hola a todos, tengo una duda al trabajar con archivos de texto.

Tengo dos .txt y quiero que se imprima un tercer .txt con la linea de la primero y segundo archivo, te ilustro un ejemplo.

1.txt
Citar
Palabra uno
Palabra dos
Palabra tres

2.txt
Citar
Verbo uno
Verbo dos
verbo tres

Y de resultado en el Tercer txt quedaría así.

3.txt
Citar
Palabra uno Verbo uno
Palabra dos Verbo dos
Palabra tres Verbo tres

Alguna soluciona para ello.

Salu2  :huh:
"Pensando en Batch" XD

leogtz

Esto me funciona:

Código (bash) [Seleccionar]
C:\Users\leo\batch>type 1.txt
Palabra uno
Palabra dos
Palabra tres

C:\Users\leo\batch>type 2.txt
Verbo uno
Verbo dos
verbo tres

C:\Users\leo\batch>code.cmd

C:\Users\leo\batch>type final.txt
Palabra uno Verbo uno
Palabra dos Verbo dos
Palabra tres verbo tres

C:\Users\leo\batch>


Código (bash) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%_ in ('type "1.txt" ^| find /v /c ""') do set n_lines=%%_

for /l %%_ in (1,1,%n_lines%) do (
call:getLine %%_ "1.txt"
set a=!text!
call:getLine %%_ "2.txt"
set b=!text!
echo !a! !b! >> final.txt
)
exit /b 0

:getLine
set n=%1
if "%2"=="" (
echo Error, se necesitan dos parámetros
exit /b 1
)
set /a cont=0
for /f "tokens=*" %%_ in ('type "%2"') do (
set /a cont+=1
if !cont! equ !n! (
set "text=%%_"
goto:eof
)
)
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Dany3j

Hola Leo gracias, también encontré esta solución.

@echo off
setlocal EnableDelayedExpansion

set i=0
for /F "delims=" %%a in (txt1.txt) do (
    set /A i+=1
    set t1[!i!]=%%a
)
set i=0
for /F "delims=" %%a in (txt2.txt) do (
    set /A i+=1
    set t2[!i!]=%%a
)
for /L %%i in (1,1,%i%) do echo !t1[%%i]! !t2[%%i]!>> txt3.txt


Salu2 :adios:
"Pensando en Batch" XD

leogtz

Ya veo, la solución es mucho más corta, ya que usa arrays, en mi caso usé una pequeña función :D

Saludos
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Dany3j

Si me salio mas corto  ;D Ademas es muy practico porque si se quiere agregar un documento de texto mas solo se debe crear otro array Voy a ver que as se me ocurre para que lo listemos en este tema.

También quería felicitarte por el gran trabajo que haces en este foro y en todos los otros. ;-)

Salu2.
"Pensando en Batch" XD

leb

#209
podrían ayudarme en el siguiente ejercicio?

Un bat que reproduzca una versión del cumpleaños feliz (por ejemplo en mp3) cuando el usuario que inicie la sesión cumpla años. Para ello, contamos con el fichero 'Nacimientos.txt' donde guardamos la fecha de nacimiento de cada usuario. El formato de cada entrada será:

Lmartin:dd/mm/aaaa