批量文件在特定时间检查文件是否存在

时间:2013-05-06 13:15:49

标签: batch-file

批处理脚本新手。尝试编写一个脚本,通过轮询目录来检查文件名以LEND开头的文件,如果17:30之前没有收到该文件,则将日志消息写入日志文件。我编写了下面的批处理脚本,只要目录中没有文件,脚本就可以正常运行。一旦我把文件放在那里,它就会停止运行。如果我从该目录中删除文件,则重新启动。你能告诉我哪里出错吗? 感谢

@echo off

set I=0
set log=C:\logs\alerting.log

:recurse
for /f %%P in ('dir /b "C:\incoming\LEND*"') do (call :countfiles)
set Time=%time:~0,5%
echo Filecount: %I% at Time: %Time% >> %log%
if %Time%==17:30 goto OUT
pause 60
goto :recurse

:countfiles
set /a I+=1

:OUT 
if %I%==0 echo LEND Files not received >> %log%
EXIT

2 个答案:

答案 0 :(得分:0)

您的代码从countfiles开始退出。试试这个:

:countfiles
set /a I+=1
goto:eof

答案 1 :(得分:0)

实际上存在一些缺陷 - 重复使用时间变量,期望将暂停用作延迟,测试中可能错过时间范围,以及其他更小的事情。

就文件计数而不是17:30分支

进行测试

我改变了一些命令和变量名的样式(我太喜欢l和i以及许多字体中的1)

@echo off

set log=C:\logs\alerting.log

:loop
for /f %%P in ('dir /b "C:\incoming\LEND*" 2^>nul ^| find /c /v "" ') do set c=%%P
set now=%time:~0,5%
echo Filecount: %c% at Time: %now%
echo Filecount: %c% at Time: %now% >> %log%
if %now:~0,2%%now:~3,2% GTR 1730 goto :OUT
ping -n 60 localhost >nul
goto :loop

:OUT 
if %c% EQU 0 echo LEND Files not received >> %log%
EXIT
相关问题