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