Ms-Dos - Copiar uno o varios archivos de texto si encuentra una palabra

 
Vista:

Copiar uno o varios archivos de texto si encuentra una palabra

Publicado por paul (7 intervenciones) el 17/03/2014 13:16:21
Se puede crear una archivo bat, que busque dentro de una carpeta todos los archivos .txt, que recorra cada uno buscando una palabra. Si encuentra dicha palabra, copiar el archivo.txt que la contiene en otra carpeta?

1. buscar una palabra en los archivos .txt
2. copiar los que contengan una palabra especifica
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

Copiar uno o varios archivos de texto si encuentra una palabra

Publicado por Antoni Masana (811 intervenciones) el 18/03/2014 06:47:10
Se puede hacer de varias formas:

Te pongo tres ejemplos

1
2
3
@echo off
findstr /i /m {Palabra} *.txt >temporal.tmp
FOR /F %%a in ( Temporal.tmp ) do copy %%a {destino}


1
2
3
4
5
@echo off
FOR %%a in (*.txt) do (
    find /i "{palabra}" %%a >nul
    if errorlevel 0 copy %%a {destino}
    )


1
2
@echo off
for /F %%a in ( 'findstr /i /m echo *.bat' ) do @copy %%a {destino}
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

Copiar uno o varios archivos de texto si encuentra una palabra

Publicado por paul (7 intervenciones) el 20/03/2014 13:14:33
@echo off
findstr /i /m {Palabra} *.txt >temporal.tmp
FOR /F %%a in ( Temporal.tmp ) do copy %%a {destino}

no acabo de entender "temporal.tmp"
- lee un archivo .txt guardándolo en .tmp? y asi sucesibamente con con todos los txt que tengo?

Mi problema es el siguiente:
tengo una carpeta con archivos .txt, dentro de la cual quiero que se ejecute el bat, el cual busque una palabra, y que solo copie aquells .txt que tengan esa palabra.


Agradezco mucho vuestra atención.
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

Copiar uno o varios archivos de texto si encuentra una palabra

Publicado por Antoni Masana (811 intervenciones) el 21/03/2014 06:52:00
Te explico lo que hace cada opción

1
2
3
@echo off
FINDSTR /i /m {Palabra} *.txt >temporal.tmp
FOR /F %%a in ( Temporal.tmp ) do copy %%a {destino}

Línea 1 - Obvió
Línea 2 - FINDSRTR busca un texto en todos los archivos con extensión TXT y devuelve el nombre de los archivos que contengan este texto, el contenido se guarda en un fichero temporal, que bien podría llamarse %Temp%\popo.tmp.
Línea 3 - El FOR lee el contenido del fichero temporal (que es la lista de ficheros encontrados por el FINDSTR) y realiza la acción de copiar
Línea 4 - Que para ser pulidos falta. Borrar el fichero temporal.


1
2
3
4
5
@echo off
FOR %%a in (*.txt) do (
    FIND /i "{palabra}" %%a >nul
    IF errorlevel 0 copy %%a {destino}
    )

Línea 1 - Obvió
Línea 2 - El FOR devuelve uno a uno la lista de ficheros TXT
Línea 3 - FINDSRTR busca un texto en el archivo devuelto por el FOR. Se oculta la salida de mensaje
Línea 4 - Si el encuentra el texto ErrorLevel vale 0 y copia el archivo, en caso contrario vale 1
Línea 5 - Fin del FOR

1
2
@echo off
for /F %%a in ( 'findstr /i /m {Palabra} *.txt' ) do @copy %%a {destino}

Línea 1 - Obvió
Línea 2 - Funciona casi igual que el primero pero sin fichero temporal, el resultado del FINSTR se pasa directamente al FOR.

NOTA: El tercero es mas limpio pero como esto es Microsoft las cosas no funcionan siempre como uno espera que lo hagan.

La primera estructura funciona siempre, las otras dos dependen de muchos factores, en este caso funciona bien pero según que cambios desees hacer puede haber problemas, el comando FOR de consola no es precisamente una instrucción amigable, más bien cuando la estaban programando le dio cagarrinas al programador y la termino deprisa y corriendo, creo que podría entrar en el libro Guinness de las chapuzas informáticas.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Copiar uno o varios archivos de texto si encuentra una palabra

Publicado por paul (7 intervenciones) el 21/03/2014 12:20:44
muchas gracias :)
ME FUNCIONO!!
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

Copiar uno o varios archivos de texto si encuentra una palabra

Publicado por paul (7 intervenciones) el 10/04/2014 10:44:12
muy buenas, hace un tiempo pedi ayuda para un script que lo pondré a continuación:
lo que hace es lo siguiente:
1. Crea una carpeta y copia dentro todos los archivos txt
2. Busca en cada txt una palabra
3. Crea otra carpeta dentro de la anterior con los txt que contienen la palabra

Problema: hay algunos archivos que los pasa por alto y que contienen la palabra, donde esta el fallo?
-------------
@echo off
cd c:\nuevo
mkdir "%date:~0,2%%date:~3,2%%date:~6,4%_%time:~0,2%%time:~3,2%"
cd "%date:~0,2%%date:~3,2%%date:~6,4%_%time:~0,2%%time:~3,2%"
cd c:\nuevo
copy c:\nuevo\*.txt c:\nuevo\"%date:~0,2%%date:~3,2%%date:~6,4%_%time:~0,2%%time:~3,2%\"
del *.txt
cd c:\nuevo\"%date:~0,2%%date:~3,2%%date:~6,4%_%time:~0,2%%time:~3,2%"
mkdir perdidas
cd c:\nuevo\"%date:~0,2%%date:~3,2%%date:~6,4%_%time:~0,2%%time:~3,2%"
FINDSTR /i /m espera *.txt >temporal.tmp
FOR /F %%a in ( temporal.tmp ) do copy %%a c:\nuevo\"%date:~0,2%%date:~3,2%%date:~6,4%_%time:~0,2%%time:~3,2%\"perdidas\
del *.tmp
pause

Gracias de antemano
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

Copiar uno o varios archivos de texto si encuentra una palabra

Publicado por emmanuel fuentes (1 intervención) el 16/12/2015 20:50:50
hola espero que me puedan ayudar.. desde copiar archivos de una gran lista de archivos ... de una carpeta a otra
el detalle es que tengo que verificar si dentro del archivo existe una cierta cadena de caracteres. En los codigos donde puedo implementar la dirección de la carpeta "Origen" solo logro apreciar donde dice "{destino]"
Les agredezco mucho su atención.
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

Copiar uno o varios archivos de texto si encuentra una palabra

Publicado por Franklin (2 intervenciones) el 05/03/2018 19:16:35
Buenas tardes,

Si mi carpeta de destino contiene signos de % por ejemplo: "validación 0.9%"

Como hago para que me la acepte?

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

Copiar uno o varios archivos de texto si encuentra una palabra

Publicado por Antoni Masana (811 intervenciones) el 06/03/2018 15:52:42
Puedes poner dos %%

Si desde la linea de comandos haces esto

1
C:\> DIR "validación 0.9%"

Funciona. Pero desde un BAT tienes que hacer esto:

1
2
echo off
DIR "validación 0.9%%"

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

Copiar uno o varios archivos de texto si encuentra una palabra

Publicado por luis (1 intervención) el 26/11/2020 14:18:36
Hola, no entiendo mucho de los archivos bat
pero tengo en el disco C una carpeta Out que contiene archivos TXT y necesito también que lea los archivos y si encuentra coincidencias los mueva, no los copie a una carpeta OUT1-
Me podrían ayudar a como redactar el texto en el Bat
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