0

批处理脚本的新手。尝试编写一个脚本,通过轮询目录来检查文件名以 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
4

2 回答 2

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
于 2013-05-06T13:59:50.403 回答
0

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

:countfiles
set /a I+=1
goto:eof
于 2013-05-06T13:36:01.577 回答