Ejercicio complicadillo

Me pusieron este ejercicio el otro día:
Realizar un fichero para crear una estructura de directorios. Los directorios se escriben por parámetros y cada uno debe contener al siguiente. El fichero debe aceptar un número ilimitado de parámetros.
Y me contestaste que este era el programa:
@ECHO OFF
REM lo que viene a continuación es el bucle
:Bucle
MD %1
CD %1
SHIFT
REM la instrucción que sigue controla el final del bucle
IF NOT %1.==. GOTO BUCLE

Yo lo he hecho y no me sale bien. No sé si falta algo o que pasa pero me da error. Supongo que falta por crear alguna variable o algo así pero no estoy muy seguro por donde empezar.
Otro ejercicio era: Realizar un fichero que acepte como parámetros una extensión y una fecha y muestre los nombres de todos los ficheros con la extensión y creados en esa fecha dentro del disco duro. Verificar que se han escrito los dos parámetros.
Y yo he hecho esto:
@echo off
Echo introduce la extensión
set/p ext=extension
echo introduce la fecha
set/p fecha=fecha
CD \
DIR /S /TC *.%EXT%
Pause>nul

Consigo que me liste los archivos con la extensión que le ponga pero con la fecha no soy capaz de dar, me da un error diciéndome que el modificado / no es válido.

1 respuesta

Respuesta
1
Veamos.
Los parámetros son los valores que se pasan junto al nombre del BAT invocado. Supongamos que copias lo que te puse para el primero en un archivo de nombre CREAESTRU.BAT y que luego lo invocas/ejecutas con una llamada como:
CREAESTRU AA BB CC DD EE FF GG HH
te creará, a partir del directorio en el que estés en ese momento, la estructura:
AA\BB\CC\DD\EE\FF\GG\HH
Si lo llamas sin parámetros (solo CREAESTRU) te dará error porque siempre ejecuta las primeras instrucciones MD %1 y CD %1 y al no tener ningún valor la variable %1, da ese error. Para evitar que dé error se puede poner un control similar al que te había comentado para el último ejemplo. Se trataría de añadir al principio (después del ECHO OFF) "IF %1.==. GOTO ERROR" y al final
:Error
ECHO La sintaxis de llamada es %0 param1 param2 param3 ...
En el otro nuevamente no interpretas bien lo que se entiende por parámetros. Tú los tratas como variables solicitadas. Pero eso no importa gran cosa (aunque creo recordar que se pedía explícitamente que se controlase que el número de parámetros fuera el correcto, es decir dos: la extensión y la fecha). Supongo que lo que has hecho es un BAT previo de trabajo pero en él no me muestras lo que intentas hacer con la fecha que es lo que parece darte problemas.
Prueba con esto:
@echo off
REM para listar todos los archivos de disco duro con determinada extensión de una fecha
IF %2.==. GOTO ERROR
CD \
FOR /F "tokens=1,2,3,4" %%A IN ('dir /S /TC *.%1') DO (IF "%%A"=="%2" ECHO %%D)
GOTO FIN
:Error
Echo el formato de la llamada es %0 extensión fecha
:FIN
Si en lugar de que te saque solo el nombre quieres que te saque la fecha, la hora y el nombre (por ejemplo), en lugar de ECHO %%D debes poner ECHO %%A %%B %%D
Si te funciona (que debe funcionar) y necesitas alguna aclaración no cierres la pregunta y seguimos "hablando".
Me gusta ver que al menos intentas hacer las cosas.
Saludos,
GGG
Se me olvidó comentarte expresamente que en el segundo ejemplo, si le das el nombre, por ejemplo, de LISTAEXT.BAT, debes llamarlo de la forma siguiente:
LISTAEXT TXT 15/08/2010
Si lo que quieres es que te liste todos los archivos con extensión .TXT creados el día 15/08/2010. Si solo escribes LISTAEXT te dirá:
El formato de la llamada es listaext extensión fecha
Saludos,
GGG
Muchísimas gracias, ha funcionado todo perfectamente. Mi fallo era la diferencia entre variables y parámetros y veo que me lo has explicado de maravilla.
Muchas gracias, en serio.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas