【问题标题】:Batch file to check file existence by certain time在特定时间检查文件是否存在的批处理文件
【发布时间】:2013-04-30 06:12:58
【问题描述】:

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

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    您的代码从 countfiles 转到 exit。试试这个:

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

    【讨论】:

      【解决方案2】:

      实际上有几个缺陷 - 重用时间变量,期望暂停被用作延迟,测试中可能错过了时间框架,以及其他更小的事情。

      这是就文件计数进行的测试,但不是 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
      

      【讨论】:

      • 感谢 foxidrive。我使用了你的代码,它根本没有运行。我对我的代码做了一个小改动,到目前为止,这似乎起到了神奇的作用: for /f %%P in ('dir /b "C:\incoming\LEND*"') do (set /a I+=1 ) 并摆脱了 ":countfiles"。
      • 我在代码中有错字。立即尝试 - 我对其进行了测试,它在此处用于文件计数。您需要在 17:30 测试分支
      猜你喜欢
      • 2013-04-27
      • 2021-08-07
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 2015-07-09
      • 2015-03-22
      • 1970-01-01
      相关资源
      最近更新 更多