Ms-Dos - Reemplazar caracteres en una lista.txt

 
Vista:

Reemplazar caracteres en una lista.txt

Publicado por TONIDJIN (7 intervenciones) el 14/04/2023 18:04:57
Buenas.
No he querido seguir ampliando la consulta anterior que ya quedo resuelta, añadiendo nuevas preguntas. Entiendo que lo correcto es plantear nuevas cuestiones para obtener respuesta.

Estoy intentando reemplazar cadenas de texto en un archivo lista.txt
Con notepad plus se puede hacer , añadir texto al principio y al final y eliminar caracteres también, pero estoy atascado un rato y planteo lo que he podido obtener de momento

Con este script puedo añadir texto al inicio y/o al final de cada linea
@echo off
set inicio=file1_
set final=.zip

for /f "tokens=*" %%i in (lista.txt) DO (
echo %%i%final% >>"lista_mas_extension.txt"
echo %inicio%%%i >>"lista mas textoinicio.txt"
)

La pregunta es cómo puedo conseguir suprimir o reemplazar texto...??

Quisiera convertir esta lista.txt
file1.zip
file 2.chd

En lista_retocada.txt
file1
file 2

O p.ej lista.txt
01 cancion1.mp3
02 cancion2.mp3

Convertir a lista_retocada.txt
cancion1
cancion2

Gracias anticipadas
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Reemplazar caracteres en una lista.txt

Publicado por Antoni Masana (811 intervenciones) el 16/04/2023 20:48:27
Se puede complicar aun más si en la misma lista tienes casos diferentes.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
 
echo file1.zip>>Lista_1.txt
echo file 2.chd>>Lista_1.txt
 
for /f "delims=. tokens=1" %%a in (Lista_1.txt) do @echo %%a
del lista_1.txt
echo.
echo 01 cancion1.mp3>>Lista_1.txt
echo 02 cancion2.mp3>>Lista_1.txt
 
for /f "delims=. tokens=1" %%a in (Lista_1.txt) do Call :Corta %%a
del lista_1.txt
echo.
goto:EOF
 
:Corta
   echo %2

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Reemplazar caracteres en una lista.txt

Publicado por TONIDJIN (7 intervenciones) el 17/04/2023 20:14:06
Perdona mi ignorancia.
Entiendo por lo que me dices que efectivamente hacer las dos cosas a la vez en un script debe ser muy complejo. Creo entonces que para simplificar debe hacerse un script para eliminar la extension final y otro para eliminar p.ej. caracteres al inicio.

Se que no es la forma de aprender, pero voy haciéndolo a base de intentar entender los scripts que haces, y los que he visto en este foro, que casi siempre son tuyos por cierto..
.
Si pudieras enviar algún enlace donde ver ejemplos genéricos te lo agradecería.
Pero volviendo a la respuesta que me has dado, probablemente no me he explicado bien.

Digamos que tengo una lista.txt que contiene 500 lineas y quiero eliminar en cada linea la extensión.
Es lo que quería explicar al poner el ejemplo de file1.zip y file 2.chd, no son archivos realmente que estén en este directorio
Lo que quería era obtener otra lista basicamente que suprima la extensión. Algo muy sencillo de hacer con worpad p.ej, pero quería aprender cómo hacerlo mediante bats.
El otro ejemplo es también del estilo, se puede hacer más o menos fácil con notepad plus, pero si lo puedo hacer con un script de msdos pues mejor.

Gracias anticipadas por tus respuestas, como siempre Antoni Masana.

Creo que con este valdría para quitar la extensión

@echo off

for /f "delims=. tokens=1" %%a in (lista.txt) do (
echo %%a>>lista_retocada.txt
)

Me faltaría el otro para quitar los caracteres iniciales.... Si me pones un ejemplo genérico ya lo voy probando... aquí lo que he aprendido con lo que me has dicho es lo de deliminar desde . y lo de tokens 1, imagino que es para hacerlo solo en la primera palabra de las que haya...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

Reemplazar caracteres en una lista.txt

Publicado por Antoni Masana (811 intervenciones) el 18/04/2023 12:37:06
Los BAT son una herramienta con muchas carencias a la hora de tratar textos.
Para quitar la extensión de una lista de ficheros hay una opción mas adecuada:

1
2
3
4
5
6
7
8
9
10
@echo off
 
echo file1.zip>>Lista_1.txt
echo file 2.chd>>Lista_1.txt
echo 01 cancion1.mp3>>Lista_1.txt
echo 02 cancion2.mp3>>Lista_1.txt
 
for /F "delims=*" %%a in (Lista_1.txt) do @echo %%~na
del lista_1.txt
echo.

En este caso el texto "delims=*" hay que ponerlo porque los nombres tienen espacios. Si usas el primer ejemplo, es decir usando el punto en el delimitador si el nombre tiene más de un punto tendrás un problema.

Para tener más información de los comandos ejecútalos con el parámetro /?.

Para recortar nombres se puede utilizar el comando SET.

Los BAT tienen muchos fallos y fallos garrafales. Por ejemplo:

1
2
3
4
@echo off
 
SET /A Num=5*(2+3)
echo %Num%

Esto funciona i es correcto. En cambio esto da un error y no debería darlo:

1
2
3
4
5
@echo off
FOR %%a in (5 6 7) do (
    SET /A Num=%%a*(2+3)
    echo %Num%
)

Empareja mal los paréntesis.
Este sistema funciona desde la década de los 80 y Microsoft no se ha molestado en hacer un buen sistema de comandos y ha realizado una chapuza tras otra. Yo he trabajado con esto desde que salió al mercado el primer IBM personal.

Si quieres una buena herramienta utiliza el PYTHON, podrás hacer esto y 50.000 cosas más.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Reemplazar caracteres en una lista.txt

Publicado por Rolando José (2 intervenciones) el 18/04/2023 17:48:34
Antes de aprender a programar hace ya muchos años, antes del 2000 creo, conoci el busybox, que es un compendio de herramientas para Linux que lo habia para Win32 y Win64 y le dejaba a uno un BASH que funcionaba sobre el DOS del Windows XP yo lo usaba porque era muy rapido, y mucho mas completo que el DOS para disminuir la calidad de las fotos JPEG, pero para que me quedara un registro del cambio, necesitaba dejarles el mismo nombre "foto"el numero que traían que generalmente era la fecha o la hora de la foto y poner al final "_M" que indicaba que fue modificada.

Esto lo hacia con el siguiente script:

1
for foto in $(ls -1 *.jpg); do ./convert.exe -verbose -quality 80 $foto ../MINIS/${foto%%.*}_M.jpg  ; done

Yo uso bash, de busybox, porque el cmd es mas limitado casi en todo.

ls -1 *.jpg hace una listado de todos los archivos *.jpg sin atributos, solo nombre y con for recorro ese listado y cada uno lo pone en una variable "foto" luego do ejecuta convert que era el comando de la libreria imagemagick para DOS que convertia imagenes tomaba la foto y la comprimia con calidad 80%, disminuyendo mucho su tamaño.
para separar la parte del nombre y dejar todo lo demas usaba %%*

Me sorprendió saber que DOS es la pregunta pasada tambien soportaba %%, luego es posible que aqui tambien te sirva este ejemplo de script.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Reemplazar caracteres en una lista.txt

Publicado por TONIDJIN (7 intervenciones) el 18/04/2023 18:19:13
Bueno me queda claro que por tu recomendación no hay que entrar en mucho detalle con los bats si como bien dices PYTHON lo resuelve mucho mejor.

He intentado entender tus últimas indicaciones, pero como soy muy nuevo en esto, no te quiero marear mucho preguntando el funcionamiento de tu script. Realmente son funciones que pueden hacerse perfectamente con notepad plus o incluso la de la extensión con el worpad,

He intentando hacerlo como me indicabas pero no lo hace (al menos a mí), y finalmente he trasteado un poco lo que me has enviado para finalmente dejarlo así. (así al menos a mí me funciona)

@echo off
dir *.* /b >_listaficheros_con_extension.txt
for /f "delims=*" %%i in (_listaficheros_con_extension.txt) DO (
@echo %%~ni>>"_listaficheros_sin_extension.txt"
)

Con esto genero un listado con el contenido de los ficheros de un directorio, y después creo un nuevo listado a partir del primero suprimiendo las extensiones

Tengo claro que si quiero profundizar y aprender algo en esta materia se trata de hacer algún curso de python para ver hasta donde llegamos...je.je. me olvidaré de entrar demasiado en msdos con los .bat si se complica lo que intento conseguir

Por cierto efectivamente el ejemplo que te ponía si tenía algún . adicional además de la extensión fallaba, solamente quitaría la extensión si el texto no contenía ningún "."
Pero con lo de ~ni me lo has resuelto.

Gracias por tus consejos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Reemplazar caracteres en una lista.txt

Publicado por Rolando José (2 intervenciones) el 19/04/2023 18:56:48
ESte tipo de acciones sencillas que se pueden hacer por consola es mejor hacerlas con comandos de un buen shell y no entrar a programar, nisiquiera en python que es relativamente mas facil que c o c++ o java, porque los comandos de un shell, trabajando en tuberias unos detras de otros son miles de veces mas optimizados que los que puedas hacer en programación sin ser experto.

lo voy a poner un ejemplo:
deseo hacer un listado de todos los archivos de mi disco.
En python o cualquier otro lenguaje tendría que recurrir a una función recursiva que liste cada archivo de un directorio y que cuando encuentre un directorio se llame a si misma hasta que no encuentre directorio alguno y cada archivo lo vaya guardando en un archivo porque en RAM es imposible.

En un disco puden haber medio millon de archivos.
ese codigo debe optimizarse en memoria y en cpu para que no consuma o toda la ram o todo el disco duro.

du -a / >> listado_archivos lo hace mas facil, en menos de una hora y sin colapsar la memoria RAM o el disco donde lo guarde.

Ahora vas a ordenar el listado de archivos por tamaño para saber por ejemplo que archivos estan repetidos y cuales no.
En programacion solamente abrir un archivo con medio millon de lineas de texto, es un reto enorme. ahora que las ordene por la primera columnda de numeros es un infierno.

lo resolví con busybox fácil:
du -a C:/ >>lista.log
cat lista.log | sort -k 5 -nr $lista >>ORDENADO_$lista;
done




bueno si yo tambien le tenia muho miedo a borrar archivos, por eso es que te recomiendo primero que uses no un lenguaje de programacion sino un shell con muchas herramientas como el bash. Los shell por mi experiencia tienen una ventaja y es que en si con pequeños comandos que puedes usar por aparte, luego los enlazas y con la barra "|" se pueden encadenar, para que por ejemplo, un comando busca archivos y otro busca su contenido, entonces puedes enlazarlos para que en una misma linea uno busque archivos de texto, y los que encuentre se los pase al otro que abre los archivos mira su contenido busca algo de ese contenido y lo muestra y lo devuelve para que otro programa o otro script haga otra cosa. eso hacerlo en python o en otros lenguajes de programacion es mucho mas complejo, sobre todo optimizada la memoria o el acceso a los archivos y directorios.

du -a /| grep -e ".html$" | grep "<svg" | tar -xv | nc 192.168.0.100 -p 2121

du busca archivos en disco duro y pasa toda los 470000 archivos.
grep -e ".html" selecciona los que tengan la extension ".html" y el $ indica final de linea
grep -e "<svg" selecciona de los anteriores los que contengan el texto "<svg"
tar -cv
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar