Foros del Web » Programación para mayores de 30 ;) » Programación General »

Organizar carpetas con archivos BAT

Estas en el tema de Organizar carpetas con archivos BAT en el foro de Programación General en Foros del Web. Buenas a todos, estoy organizando una serie de pdfs y para ello necesito crearme un archivo bat y ponerlo como tarea programada pero no tengo ...
  #1 (permalink)  
Antiguo 28/11/2008, 06:01
 
Fecha de Ingreso: noviembre-2007
Mensajes: 81
Antigüedad: 16 años, 5 meses
Puntos: 0
Pregunta Organizar carpetas con archivos BAT

Buenas a todos, estoy organizando una serie de pdfs y para ello necesito crearme un archivo bat y ponerlo como tarea programada pero no tengo mucha idea sobre este lenguaje.

Lo que necesito hacer es que cuando se ejecute me borre todos los archivos que lleven ya creados mas de 30 dias de la carpeta c:\pdf.

Alguien me puede decir como hacerlo ???

Por ahora lo unico que he conseguido hacer es lo siguiente:

Cita:
@ECHO OFF

SET anyo = %date:~0,4%
SET mes = %date:~5,2%
SET dia = %date:~8,2%
SET fecha = %date~0,10%

FOR %%x IN (*.pdf) DO (
SET faux = %%~tx
SET f = %faux~0,10%
IF "%fecha%" EQU "%f%" (
ECHO %%x
))
Si quito el IF me muestra bien todos los pdf que hay en la carpeta pero cuando le pongo la condición parece que se la salta y me sigue mostrando todos.

Que puedo hacer ???

Última edición por diablo_jr; 28/11/2008 a las 09:54
  #2 (permalink)  
Antiguo 28/11/2008, 21:27
 
Fecha de Ingreso: noviembre-2002
Ubicación: DF
Mensajes: 1.056
Antigüedad: 21 años, 5 meses
Puntos: 37
Respuesta: Organizar carpetas con archivos BAT

No se decirte con los comandos .bat, pero yo quiza lo haria con un .exe visual basic que realice lo que requieres y poner el .exe como tarea programada.
  #3 (permalink)  
Antiguo 28/11/2008, 22:57
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Organizar carpetas con archivos BAT

Tienes algunos errores en los comandos que estás usando, por ejemplo, te faltan los dos puntos (:) al tratar de obtener parte de la fecha del archivo. Además, cuando trabajes con un bucle for creo que es mejor hacerlo en un archivo separado y pasar la fecha y el nombre del archivo por parámetros.

P.S.: También puedes hacerlo con un *.vbs (VBScript).
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #4 (permalink)  
Antiguo 01/12/2008, 03:35
 
Fecha de Ingreso: noviembre-2007
Mensajes: 81
Antigüedad: 16 años, 5 meses
Puntos: 0
Pregunta Respuesta: Organizar carpetas con archivos BAT

Ya he avanzado un poco mas; ahora mi duda es la siguiente:

SET fecha = %date%
SET fecha = %fecha:-=%
SET /a f = fecha

SET /a m = f / 100
SET /a d = m * 100
SET /a d = f - d
SET /a a = m / 100
SET /a a = a * 100
SET /a m = m - a
SET /a a = a / 100
IF %m% EQU 1 (
SET /a m = 12
SET /a a = a - 1
)
IF NOT %m% EQU 1 (
SET /a m = m - 1
)
SET /a f = a * 10000 + m * 100 + d
SET fechaModificada = %a%-%m%-%d%

FOR %%x IN (*.pdf) DO (
IF %%~tx LSS %fechaModificada% ( ECHO %%x )
)

con esto atraso la fecha al mes anterior pero cuando comparo si la fecha del PDF es anterior a la que yo he retrasado no me pinta nada...
Como consigo comparar esas fechas ???

Última edición por diablo_jr; 01/12/2008 a las 06:47 Razón: Mejora del código
  #5 (permalink)  
Antiguo 01/12/2008, 11:23
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Organizar carpetas con archivos BAT

Mira si te sirve esto:
Código:
@echo off
set dhoy=%date:~0,2%
set dmes=%date:~3,2%
set dyear=%date:~6,4%

set /a dmes-=1
if %dmes% equ 0 (
        set dmes=12
        set /a dyear-=1
)

for %%x IN (*.*) DO call datep.bat %%x "%%~tx" %dhoy% %dmes% %dyear%
Archivo datep.bat:
Código:
set fechaarch=%2
if NOT %fechaarch:~7,4% LSS %5 (
    if NOT %fechaarch:~4,2% LSS %4 (
                if NOT %fechaarch:~1,2% LSS %3 GOTO END
    )
)

echo %1

:END
Solo necesitas modificar el "echo %1" por el comando que quieras ejecutar. Saludos .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 02/12/2008, 04:53
 
Fecha de Ingreso: noviembre-2007
Mensajes: 81
Antigüedad: 16 años, 5 meses
Puntos: 0
Pregunta Respuesta: Organizar carpetas con archivos BAT

Funciona bastante bien pero tiene un inconveniente:

Segun el primero de los codigos, la fecha se retrasa un mes pero cuando lo ejecuto me mantiene los PDF de dos meses anteriores.

Lo estoy revisando haber porque pasa esto, es un poquito raro. Si tu pudieras echarle un vistazo tambien....

Última edición por diablo_jr; 02/12/2008 a las 05:27
  #7 (permalink)  
Antiguo 02/12/2008, 06:37
 
Fecha de Ingreso: noviembre-2007
Mensajes: 81
Antigüedad: 16 años, 5 meses
Puntos: 0
Pregunta Respuesta: Organizar carpetas con archivos BAT

He encontrado el problema, te lo explico con un ejemplo.

Hoy estamos a 02-12-2008, y esto debería borrar todos los archivos que se hayan creado antes del 02-11-2008.

Si haces una traza con un archivo del dia 01-12.2008, no lo da por valido ya que el dia no es mayor que el de la fecha retrasada. Al final he puesto el codigo asi:

Código:
set fechaarch=%2

if %fechaarch:~1,4% LSS %5 ( GOTO BORRAR )
if %fechaarch:~1,4% GTR %5 ( GOTO MANTENER )
if %fechaarch:~1,4% EQU %5 (
	if %fechaarch:~6,2% LSS %4 ( GOTO BORRAR )
	if %fechaarch:~6,2% GTR %4 ( GOTO MANTENER )
	if %fechaarch:~6,2% EQU %4 (
		if %fechaarch:~9,2% LSS %3 ( GOTO BORRAR )
		if %fechaarch:~9,2% GTR %3 ( GOTO MANTENER )
		if %fechaarch:~9,2% EQU %3 ( GOTO MANTENER )
	)
)

:BORRAR

ECHO  Deleted ....... %2 ...... %1 >> log.txt
DEL %1
GOTO END

:MANTENER

ECHO  OK ............ %2 ...... %1 >> log.txt

:END
Esto me borraria todos los archivos que tengan mas de un mes.

Un saludo.
  #8 (permalink)  
Antiguo 02/12/2008, 06:51
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Organizar carpetas con archivos BAT

Creo que encontré el error. Prueba cambiando el archivo datep.bat por esto:
Código:
set fechaarch=%2
if %fechaarch:~7,4% GTR %5 goto end
if %fechaarch:~7,4% EQU %5 (
    if %fechaarch:~4,2% GTR %4 goto end
    if %fechaarch:~4,2% EQU %4 (
        if %fechaarch:~1,2% GTR %3 goto end
    )
)
echo %1

:END
EDITO: Choqué contigo al dar la solución , creo que con lo que puse basta, habrá que probarlo. Saludos .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:45.