Eliminar un archivo antiguo de X horas
Sulyvan77
Mensajes publicados
3
Estado
Miembro
-
brucine Mensajes publicados 24984 Fecha de registro Estado Miembro Última intervención -
brucine Mensajes publicados 24984 Fecha de registro Estado Miembro Última intervención -
Hola,
Actualmente estoy en prácticas en una gran empresa y se me ha pedido que realice un script en Batch o VB para eliminar archivos temporales, pero solo los archivos que tengan más de 3 horas.
Realmente no soy un experto en scripting, estoy comenzando.
Aquí está el código que encontré en internet y que intenté modificar sin éxito, resultando en un mensaje de error.
Entonces, obtengo el siguiente mensaje de error:
Así que, si alguien tiene una solución para ofrecerme :)
Gracias y buen día,
Actualmente estoy en prácticas en una gran empresa y se me ha pedido que realice un script en Batch o VB para eliminar archivos temporales, pero solo los archivos que tengan más de 3 horas.
Realmente no soy un experto en scripting, estoy comenzando.
Aquí está el código que encontré en internet y que intenté modificar sin éxito, resultando en un mensaje de error.
@echo off
set fich=C:\Users\paje01\Desktop\TEST\test1
set hora=3
pause
forfiles -p %fich% -s -m *.* -d -0 -c "cmd /c del @FILE" -d -3
pause
@exit
Entonces, obtengo el siguiente mensaje de error:
Presione una tecla para continuar...
Error: Argumento u opción no válida - «cmd /c del @FILE».
Escriba "FORFILES /?" para mostrar la sintaxis.
Presione una tecla para continuar...
Así que, si alguien tiene una solución para ofrecerme :)
Gracias y buen día,
4 respuestas
-
Hola,
En tu comando falta un espacio entre-3 -c
Sin embargo, este comando trata los días, no las horas. Tendrías que buscar otro script.
Saludos
--
un extranjero es un amigo que no hemos conocido aún. -
Hola y gracias por tu respuesta,
Después de investigar he logrado hacer un script funcional para los días, pero para las horas sigo en la búsqueda con bastante dificultad. Aquí está mi prueba:
@ECHO OFF
REM INICIO DEL SCRIPT
REM MOSTRAR HORA Y MINUTOS
for /f "tokens=1,2,3 delims=:" %%a in ('time /t') do set hora=%%a
for /f "tokens=1,2,3delims=:" %%a in ('time /t') do set minuto=%%b
echo Hora : %hora%
echo Minuto : %minuto%
REM ///////CREAR CARPETA CONTENIENDO HORAS Y MINUTAS
REM ///////echo Prueba > archivo_%hora%%minuto%.txt
pause
REM VARIABLES DE TIEMPO Y CARPETAS
REM DIRECTORIO QUE CONTIENE NUESTROS ARCHIVOS
SET REPDOSS=C:\Users\paje01\Desktop\TEST\test1
REM NÚMERO MÁXIMO DE DÍAS DE CONSERVACIÓN
SET HMAX=%time~0,2%
pause
REM ELIMINAR LOS ARCHIVOS
forfiles /P %REPDOSS% /m *.* /D -%HMAX% /C "cmd /c del /q @path"
pause
REM ///// PRUEBA
REM /////ForFiles /P "%REPDOSS%" /D -%JOURMAXS% /C "CMD /C if @ISDIR==TRUE echo RD /Q /S @FILE &RD /Q /S @path"
REM MOSTRAR UN MENSAJE DESPUÉS DE LA SUPRESIÓN
echo Msgbox "El script se ha ejecutado correctamente y sus archivos han sido eliminados."
pause
-
Y aquí está el que funciona,
@ECHO OFF REM INICIO DEL SCRIPT
REM VARIABLES TIEMPO Y CARPETAS
REM DIRECTORIO QUE CONTIENE NUESTROS ARCHIVOS
SET REPDOSS=C:\Users\paje01\Desktop\TEST\test1
REM NÚMERO MÁXIMO DE DÍAS DE CONSERVACIÓN
SET JOURMAX=1
REM ELIMINA LOS ARCHIVOS
forfiles /P %REPDOSS% /m *.* /D -%JOURMAX% /C "cmd /c del /q @path"
pause
REM ELIMINAR LAS CARPETAS
REM ForFiles /P "%REPDOSS%" /D -%JOURMAXS% /C "CMD /C if @ISDIR==TRUE echo RD /Q /S @FILE &RD /Q /S @path"
PAUSE
-
Hola,
He tomado tu código para eliminar archivos/ carpetas más viejos que 1 día, luego he creado el código para eliminar los que son más viejos que 3 horas:
@echo off
setlocal enableextensions enabledelayedexpansion
chcp 1252 >nul
REM DIRECTORIO QUE CONTIENE NUESTROS ARCHIVOS
SET REPDOSS=C:\Users\paje01\Desktop\TEST\test1
REM NÚMERO MÁXIMO DE DÍAS DE CONSERVACIÓN
SET JOURMAX=1
cd /d %REPDOSS% || exit /b 1
REM ELIMINA LOS ARCHIVOS
forfiles /D -%JOURMAX% /C "cmd /c if @ISDIR==FALSE (del /f /q @file)"
REM ELIMINAR LAS CARPETAS
forfiles /D -%JOURMAX% /C "cmd /c if @ISDIR==TRUE (rd /Q /S @file)"
PAUSE
:: OBTENER LA HORA ACTUAL Y TRANSFORMARLA EN MINUTOS
for /f "tokens=1,2,3 delims=:" %%a in ('time /t') do (
set H_actuelle=%%a
set M_actuelle=%%b
if !H_actuelle! LSS 10 (set H_actuelle=!H_actuelle:~-1!)
if !M_actuelle! LSS 10 (set M_actuelle=!M_actuelle:~-1!)
set /a total_actuelle=!H_actuelle!*60+!M_actuelle!
)
pause
:: LISTAR LOS ARCHIVOS Y CARPETAS
for /f "delims=" %%K in ('dir /b') do (
:: OBTENER LA HORA PARA CADA ARCHIVO/CARPETA
for /f "skip=5 tokens=1,2,3,* delims=: " %%A in ('2^>nul dir "%%~K" ^| findstr /v "octets"') do (
set heure=%%B
set minute=%%C
:: TRANSFORMAR LA HORA EN MINUTOS
if !heure! LSS 10 (set heure=!heure:~-1!)
if !minute! LSS 10 (set minute=!minute:~-1!)
set /a total_fichier=!heure!*60+!minute!
:: DETERMINAR LA DIFERENCIA Y ELIMINAR ARCHIVOS/CARPETAS DEMASIADO VIEJOS
set /a ecart=!total_actuelle!-!total_fichier!
if !ecart! GTR 180 (2>nul rd /s /q "%%~K" || del /f "%%~K")
if !ecart! LSS -1440 (2>nul rd /s /q "%%~K" || del /f "%%~K")
if !ecart! LSS 0 (if !ecart! GTR -1260 (2>nul rd /s /q "%%~K" || del /f "%%~K"))
)
)
pause
exit /b 0
“La inteligencia artificial se define como lo contrario de la estupidez natural.”-
- Hola,
Si necesita ayuda, debe describir su problema con precisión, no basta con decir que no funciona.
¿Qué parte del script no funciona? ¿La primera parte que elimina archivos/carpeta de más de 1 día o la segunda parte que elimina archivos/carpeta de más de 3 horas?
¿Su problema se refiere a archivos, a carpetas o a ambos? Hola,
Seguramente has copiado mal la fórmula de barnane0057, en quien confío plenamente a este respecto.
Ten en cuenta que el Batch Dos maneja muy mal todo lo relacionado con las fechas, existen un montón de soluciones alternativas, la más sencilla sin utilizar herramientas de terceros es a través de PowerShell:
https://stackoverflow.com/questions/74026069/how-to-delete-all-files-last-modified-more-than-5-minutes-ago
-