1. Porque dices que es el peor lenguaje para hacer esto?
Por qué Batch es un lenguaje muy limitado, según palabras oficiales de Microsoft es un lenguaje ideado para automatizar algunas tareas comunes del sistema y poco más, cualquier cosa se vuelve tediosa desarrollarla en Batch (quiero decir, muchas más lineas de código en comparación con otro lenguaje) por que no es un lenguaje que exponga miembros o conceptos esenciales que se pueden encontrar en la mayoría de los otros lenguajes actuales, ya sean lenguajes de Scripting o compilados, empezando por el soporte para un miserable Array.
Depender de procesos externos (o mal llamados "comandos externos") como ping.exe, forfiles.exe, findstr.exe, etc solamente para poder realizar la mayoría de operaciones "esenciales" en Batch ...eso ya lo dice todo por si mismo, cada llamada a esos procesos se traduce en tiempo de ejecución que se debe consumir hasta que el proceso se inicie y devuelve el valor de retorno, Batch es lento y todas sus cosas lo vuelven todavía más lento si cabe, es muy lento sobre todo cuando se trata de iterar texto o archivos, cómo es el caso de lo que tú necesitas llevar a cabo.
En resumen, no se puede trabajar bien un código en Batch por que hay que acabar dándole mil vueltas a cualquier algoritmo simple, y eso lo vuelve tedioso ...insufrible, es así de simple.
Que me recomendarias pues? Soy nuevo en temas de scripting.
Dentro de los lenguajes integrados en Windows, si simplemente buscas algo más o menos tan sencillo cómo Batch ...pero que le da mil vueltas, ese lenguaje sería VisualBasicScript (VBS) (aunque es otro lenguaje muy limitado también), y luego le seguiría PowerShell (PS).
Si tu intención es aprender programación, entonces ninguno de esos lenguajes sería una buena opción, puedes empezar por Ruby o Python por ejemplo en lo referente al Scripting. Pero no te guies por una simple opinión cómo la mía, el mejor lenguaje siempre será aquél con el que más agusto te sientas (al escribi la sintaxis) y con el que puedas realizar todas las tareas que necesites hacer. Pero prueba algo distinto a Batch para comparar, hazme caso en eso.
Mi primer lenguaje fue Batch ...hace muchos años ya, por ese motivo entiendo que una persona no puede ser consciente de la mierd@ que supone Batch y de todos los inconvenientes, innecesarios inconvennientes por los que estás pasando para hacer cualquier código hasta que descubras un lenguaje de verdad.
2. Lei algo de lo del 0 en la fecha y probe borrarlo pero no lo logre. Porque pones lo de ~0,1 en el month? No entiendo muy bien, igual que lo del date~3,2. Es decir, entiendo que hacen pero no veo su significado o similitud con otro lenguaje.
Ese tipo de acción se denomina
SubString y consiste en extraer una serie de caracteres de un string.
En este código:
...y sabiendo que la fecha es
08/09/2015, el dígito 3 indica el inicio de la extracción (es decir, el cuarto caracter del string empezando por la izquierda), y el 2 indica la longitud de la substracción, por ende, se extraerá el string "09", el mes.
Imaginate al "3" y al "2" cómo dos parámetros a los que podemos llamar imaginariamente "StartPosition" y "Length".
Puedes ver cómo sería un substring en otros lenguajes, no se parecen nada a Batch.
3. Gracias por el codigo, lo he probado y funciona aunque no la parte de añadir el 0 y la de setear a 12 el mes.
Especifica que Windows tienes, ya que en las diferentes versiones de Windows existen pequeñas diferencias entre los comandos, tal vez el comando "Set" o la variable "DATE" u otra cosa podría tener un comportamiento distinto al que tiene en el S.O. donde lo he testeado yo,
Windows 8.1.
5. Estoy probando el forfiles y si que funciona perfectamente en el cmd, pero no lo pilla cuando lo meto en un .bat y ejecuto. Dice que no existe tal comando... A que se debe?
Si dice que no existe significa que el archivo "forfiles.exe" no se puede encontrar en el directorio de trabajo actual, pero existir, existe en tu sistema cómo ya has comprobado.
Lo que comentas es extraño, ya que debería detectar correctamente el forfiles.exe aunque modifiques el directorio de trabajo.
Comprueba que tienes agregada la ruta "C:\Windows\System32" en a variable de entorno PATH, con el siguiente comando en consola:
(path | findstr /i "%SystemRoot%\System32")1>NUL && (Echo Si Existe) || (Echo No Existe)
De todas formas siempre puedes especificar la ruta completa cuando necesites usarlo, por ejemplo:
"%SystemRoot%\System32\forfiles.exe" argumentos
Saludos