Archivos Bat

Me han puesto unos ejercicios y sé hacer algunos pero me he bloqueado con estos. Me podrías echar una mano. Gracias.
- Realizar un fichero que acepte como parámetros diferentes tipos de extensión de ficheros y que copie todos los ficheros con la extensión especificada en un directorio con ese mismo nombre.
- 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.
- 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.
1

1 respuesta

Respuesta
1
Puesto que se trata de ejercicios creo que hay que darle al asunto un enfoque especial, de manera que en lugar de resolverlos creo que sería mejor darte pistas.
Para el primero:
Supongo que sabes que los parámetros a los BAT se tratan, desde dentro del propio BAT, como variables nombradas como %n, siendo "n" el número de orden del parámetro, de modo que si se invoca a un BAT llamado EJEMPLO.BAT mediante la llamada "EJEMPLO 8 KK cinco" desde dentro del EJEMPLO.BAT tendríamos que %0 valdría EJEMPLO, %1 valdría 8, %2 valdría KK y %3 valdría cinco. Por tanto si llamamos COPIEXT al BAT que resuelve el primer ejercicio y copia todos los archivos de extensión PQR en un directorio que se llame PQR deberemos recoger en %1 la extensión de los archivos a copiar.
Lo siguiente que debes recordar es como se crea un directorio mediante un comando de MSDOS. Se hace con el comando MD (de "make directory")
Por último debes recordar la sintaxis del comando COPY de MSDOS y el uso de "comodines" en particular el comodín "*" que significa "cualquier cosa", de manera que COPY *. PQR PQR copiaría todos los archivos de extensión PQR del directorio actual a un directorio llamado PQR.
Para el segundo:
Entiendo que se pretende que llamando al BAT CREAESTR se le invoque como "CREAESTR UNO DOS TRES CUATRO CINCO" y el resultado sea una estructura de directorios como \UNO\DOS\TRES\CUATRO\CINCO. Este ejercicio tiene el problema de que se pide que acepte un número ilimitado de parámetros, mientras que los parámetros reemplazables solo llegan hasta el %9. Para saltarse esa limitación hay que usar el comando SHIFT que desplaza una posición hacia la izquierda la lista de los parámetros. Para crear la estructura en primer lugar hay que crear el nuevo mediante el comando MD y luego situarse en el último directorio creado mediante el comando CD. Para controlar que se ha llegado al final de la lista de parámetros después del SHIFT hay que comprobar con el comando IF si ya no hay más parámetros. El tratamiento indefinido hace necesario utilizar un bucle. Este te lo voy a resolver. Si no entiendes algo pregúntame:
@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
Para el tercero:
Para comprobar que se han escrito los dos parámetros basta comprobar que el valor de la variable %2 no es vacío. Serviría algo parecido al IF del ejemplo anterior, algo como "IF %2.==. GOTO ERROR" (que viene a decir que si al añadirle al valor de %2 un "." el resultado es "." vaya a ERROR)
Para hacer la comprobación en todo el disco duro deberíamos situarnos, previamente, en el directorio raíz del disco. Esto se hace con el comando  CD \ Luego con DIR /S /TC *. EXT podríamos obtener la lista de todos los archivos (eso lo consigue el /S) de extensión EXT (en el BAT sería el primer parámetro, por tanto %1) con la fecha de creación (eso lo consigue el /TC). Para decidir si se cumple la condición para listarlo debemos usar un bucle FOR
FOR /F "tokens=1,2,3,4" %%A IN ('DIR /S /TC *.%1') DO (IF "%%A"=="%2" ECHO %%D)
En este bucle leemos el resultado del comando DIR S /TC *.%1 y lo vamos dejando, para cada línea del resultado, en las variables %%A, %%B, %%C y %%D. Si ejecutas el comando desde una ventana MSDOS (o CMD) verás que lo primero que sale es la fecha, lo segundo la hora, lo tercero el tamaño y lo cuarto el nombre. Por tanto %%A tendrá la fecha (por eso se compara con %2, que es el segundo parámetro de la llamada) y %%D tendrá el nombre y solo se listará (con ECHO) cuando la fecha sea la adecuada.
Ahora inténtalo tú y dime si tienes alguna dificultad.
Saludos,
GGG

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas