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:
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 - SS64
7. 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):
O también puedes hacerlo de un modo más directo y eficiente, especificando -30 días y listo:
Saludos
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:
Código (dos) [Seleccionar]
@Echo OFF
Set "month=%date:~3,2%"
:: 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.
Set /A "month-=1"
:: Si el dígito es "0" (Enero-1), cambiamos a "12" (Diciembre)
If %month% EQU 0 (Set /A "month=12")
:: Si el mes solo tiene un dígito (1...9) le añadimos un "0", e
:: indiferentemente convertimos la variable a string.
If %month% LSS 10 (Set "month=0%month%") Else (Set "month=%month%")
Echo %month%
Pause&Exit /B 0
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:
Código [Seleccionar]
DIR /A-D /O-D
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 - SS64
7. 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):
Código (dos) [Seleccionar]
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:
Código (dos) [Seleccionar]
forfiles.exe /p "%CD%" /s /m *.* /c "cmd /c Echo @path" /D "-30"
Saludos