Eu posso pensar em duas possibilidades.
1) Os arquivos estão sendo adicionados após a conclusão da tarefa agendada. Mas eu suspeito que você está verificando os timestamps e vendo datas que antecedem a tarefa. Então, este provavelmente não é o problema.
2) Um ou mais arquivos podem ser bloqueados por outro processo, o que impediria a exclusão.
Infelizmente, o comando DEL não retorna um código de erro se ele falhar. Imprime uma mensagem de erro para stderr, mas o ERRORLEVEL retornado é sempre 0.
Você pode confirmar que os arquivos bloqueados estão causando o problema, redirecionando stderr para o seu comando DEL para um arquivo usando 2>somePath\someFile.log
. Quando houver uma falha, você verá uma mensagem de erro como The process cannot access the file because it is being used by another process.
no arquivo de log.
Se você quiser detectar e executar uma ação se um ou mais arquivos estiverem bloqueados, use uma variante de Como parar o lote script no del failure .
set "locked="
for /r "D:\Shared\Temp" %%F in (.) do dir /a-d "%F" >nul 2>nul && (ren "%F\*" * || set locked=1)
if defined locked echo Take some action because files are locked.
A renomeação de arquivos para o nome original falhará se um ou mais arquivos estiverem bloqueados. Mas você não deve fazer o teste se não houver arquivos em uma determinada pasta. O comando DIR / A-D detecta se uma determinada pasta contém arquivos. O comando FOR / R itera todas as pastas, incluindo a raiz especificada.
EDITAR
Eu deveria ter lido o link que citei mais adiante. Na parte inferior estão as respostas que fornecem uma maneira mais direta de detectar a exclusão com falha, sem usar um comando extra para detectar arquivos abertos. Basta examinar a saída stderr do comando DEL. Doh!
del /Q /F /S "D:\Shared\Temp\*.*" 2>&1 1>nul | findstr "^" >nul && echo Take action because one or more files were locked and could not be deleted
Esta solução é melhor porque está detectando o erro de DEL diretamente. A procura de arquivos bloqueados como um comando separado pode falhar se o arquivo for bloqueado após a verificação de bloqueio, mas antes da exclusão.