Bat para conseguir hacer algo parecido a un buscarv

tengo un paises.txt con varias lineas con este formato: ROMA_COLISEO. Necesito que a petición set /p país=indica un país: , copie COLISEO a otro archivo llamado monumento.txt, en las sucesivas peticiones al volver a copiarse, debe sustituir lo que hubiere en monumento.txt, los dos están en el mismo directorio

Respuesta
1

Si te entendido bien se trata de pasar a monumento.txt la parte del literal que está detrás del carácter "_" si la parte que está delante de ese carácter coincide con el valor indicado. El archivo de partida tendría, entiendo, líneas como ROMA_COLISEO, PARIS_EIFFEL, PARIS_LOUVRE, MADRID_PRADO, etc. Lo que está después del "_" ¿Puede tener espacios? En cada ejecución del BAT, ¿se guarda en monumento.txt el monumento correspondiente a la primera línea del archivo de partida que contenga el valor indicado o todos los que cumplan esa condición?

Cuando hablas de sucesivas peticiones ¿te refieres a sucesivas ejecuciones del BAT o a que el BAT tenga un bucle de ejecuciones (no tendría mucho sentido porque el monumento.txt se machacaría, según indicas)?

Me cuentas y empezamos.

Hola,

Efectivamente debe copiarse, sin quitar del origen, la parte literal después de "_" a monumento.txt, siempre que cumplan la condición de la anterior al "_", aunque en origen solo habrá una coincidencia, pero no se sabe en que línea del origen. En sucesivas repeticiones, quiero referirme a ejecuciones del Bat. Por lo general no tendrá espacios,  pero a hora que me lo planteas... Es posible. 

Parece sencillo.

Prueba con esto:

@echo off
set archorig=ciudades.txt
set /p ciudad=Indica una ciudad:
for /f "tokens=1,2* delims=_" %%a in (%archorig%) do (if "%%a" == "%ciudad%" echo %%b> monumento.txt)

En la segunda línea puedes corregir el nombre del archivo para que sea el que te conviene (paises.txt). También puedes cambiar el literal que acompaña a la petición del dato y el nombre del archivo de salida (monumento.txt). Si pudiera haber más de una coincidencia en el primer "campo", tal como está el BAT solo guardaría la última, pero es muy fácil arreglarlo para que las guarde todas, o solo la primera).

Ya me dirás,

GGG

Hola, no ha funcionado,  he puesto un pause para ver algún mensaje,  pero desaparece la ventana de DOS y no se copia nada en destino 

Si has puesto un "PAUSE", te pide el dato a buscar y se cierra la ventana debe ser que no lo has salvado antes de ejecutarlo.

Debo advertir que la búsqueda tiene en cuenta las mayúsculas y minúsculas, de modo que si en el archivo de partida dice ROMA_COLISEO y le pides que busque "Roma" o "roma" no extraerá nada.

Te sugiero que abras una ventana CMD, te sitúes en la carpeta donde tienes el bat y el archivo de partida, hagas un TYPE del BAT para ver si tiene el PAUSE, hagas un TYPE del archivo de partida y del monumento.txt. A continuación ejecuta el BAT y comprueba que hace la pausa.

Perdona, no me he explicado bien.

El pause después de pedir la ciudad, si lo hace, el texto esta siempre en mayúsculas,  lo que sucede es que después de indicarle la ciudad se cierra la ventana de DOS aún poniendo un pause al final del Bat y no sucede nada más. 

Saludos,

Toni

Pues no lo entiendo.

La única explicación que el encuentro es que el archivo que hayas puesto como archorig tenga caracteres extraños, particularmente un archivo con octetos nulos (0x00 en hexadecimal).

¿Puedes hacer un TYPE de ese archivo y mostrarlo aquí?

C:\prueba>type ciudades.txt

barcelona_sagrada familia

gerona_catedral

madrid_cibeles

valencia_oceanografico

lacoruna_torre de hercules

santiago_plaza obradoiro

tenerife_palacio de nava

vigo_monumento europa

bilbao_guggenheim

malaga_alcazaba

sevilla_giralda

alicante_benacantil

zaragoza_puente de piedra

C:\prueba>

Pues no lo entiendo. He copiado tu lista en mi archivo y me funciona correctamente.

A modo de prueba ejecuta este otro BAT:

@echo off
set archorig=ciudades.txt
for /f "tokens=1,2* delims=_" %%a in (%archorig%) do (echo %%b)

Debería sacar la lista de los monumentos. Si no sale nada prueba con otro archivo cualquiera. Si sabes subir archivos a la "nube" sube el BAT y el CIUDADES.TXT y me pasas el enlace.

Si no te puedo pasar mi correo electrónico (dejando yo a mi vez un archivo con mi dirección en la nube y el enlace aquí, operativo durante unos minutos) y ya seguimos por email.

Muestra perfectamente la lista de monumentos, y a hora revisando el por qué no me funcionaba he visto (MÍ) error. No cerré el último paréntesis, como siempre muchas gracias por tu tiempo y perdona el habérselo hecho perder. 

No te preocupes por mi tiempo. Disfruto con esto.

Y me alegra mucho saber que puedo ayudar.

Entonces, ¿lo damos por cerrado, no?

Lo damos por cerrado, gracias

Perfecto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas