Te explico lo que hace cada opción
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.
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
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