Buenas. Vayamos por partes:
1. Batch es el peor lenguaje que puedes escojer para este tipo de funcionalidad, deberias pensar seriamente en aprender otro lenguaje (más capacitado).
2. La variable dinámica
%DATE% representa la fecha acorde a la cultura actual, es decir, para los yankees el orden del día y mes será diferente. Si solo lo piensas utilizar tú, entonces no hay problema.
3. Las variables numéricas se setean usando el modificador o switch
/A, no puedes pretender restarle un número a una variable de texto (string).
4. El mes actual es "09", y al empezar por "0" debes eliminar ese caracter, ya que de lo contrario lo reconoce (indebidamente) como un string hexadecimal, lo que tampoco te dejará restarlo.
En resumen, esta tediosa barbarie:
:: Elimino el posible "0" y convierto la variable a numérica.
If "
%month:~0,1%"
EQU "0"
(Set /A "month=
%month:~1%"
)
:: Le resto un mes.
:: Si el dígito es "0" (Enero-1), cambiamos a "12" (Diciembre)
:: Si el mes solo tiene un dígito (1...9) le añadimos un "0", e
:: indiferentemente convertimos la variable a string.
Eso solamente para el tema de la fecha.
5. El uso adecuado del comando
DIR sería el siguiente, excluyendo carpetas y mostrando la fecha de modificación:
6. Para "filtrar" la salida del comando
DIR debes usar un búcle de tipo for-files
FOR /F mediante el uso del parámetro
tokens para separar la fecha del resto de información (fecha, nombre del archivo)
Ejemplo:
➢
For /f - Loop through text - SS647. La metodología de "filtrar" la salida del comando
DIR para este tipo de "filtración por fechas" es obsoleta e innecesaria, ya que a partir de
Windows VISTA dispones del "nuevo" comando
ForFiles (y también tienes como alternativa
RoboCopy).
Un ejemplo con
ForFiles, al que le pasarías el mes obtenido con el código de arriba, y donde cambiarías el comando
Echo por lo que quieras (ej.
DEL):
forfiles.exe /p "
%CD%" /s /m *.* /c "cmd /c
Echo @path" /D "-
%day%/
%month%/
%year%"
O también puedes hacerlo de un modo más directo y eficiente, especificando -30 días y listo:
forfiles.exe /p "
%CD%" /s /m *.* /c "cmd /c
Echo @path" /D "-30"
Saludos