Solución:
Esto debería resolver ese problema:
@echo off
Echo Deleting files older than 14 days...
cd /d C:WindowsSystem32
copy /b forfiles.exe "[file path...]IDOC_ARCHIVE" >nul
FORFILES /P "[file path...]IDOC_ARCHIVE" /M *.* /D -14 /C "cmd /c del @file"
Lo que hace es proporcionar un archivo de más de 14 días, por lo que siempre se eliminará y no aparecerá el mensaje “No se encontraron archivos”. Elegí forfiles.exe para copiar, pero puede usar cualquier archivo que tenga más de 14 días. Todos los demás mensajes de error aparecerán normalmente.
Agregar 2> nul hizo el truco. ¡Gracias!
forfiles / pd: todayfiles / d +0 / c “cmd / c echo @path” 2> nulo | buscar “:” / c
Básicamente, esto suprime el flujo de errores de este comando. Entonces, incluso si aparecieron otros errores al realizar esta operación, ¡no aparecerán!
La solución es capturar la salida del comando FORFILES en un bucle FOR, buscar cadenas que comiencen con ERROR y almacenar el resultado en una variable. A partir de ahí, puede usar las directivas IF / ELSE para configurar el errorlevel
respectivamente. Aquí está el código (menos algunos registros y comentarios):
cd /d C:WindowsSystem32
SET _CmdResult=NONE
FOR /F "tokens=*" %%a IN ('FORFILES /P "[file path...]IDOC_ARCHIVE" /M *.* /D -14 /C "cmd /c DEL @file" 2^>^&1 ^| FINDSTR ERROR') DO SET _CmdResult=%%a
IF "%_CmdResult%" == "ERROR: No files found with the specified search criteria." (
SET errorlevel=0
) ELSE (
SET errorlevel=1
)
IF "%_CmdResult%" == "NONE" SET errorlevel=0
Solo asegúrate de escapar de cualquier personaje como >&|
en el bucle FOR.