hc.bat
item = list.get(offset + position)
的 check.bat
set num=0
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=1-3 delims=;" %%a in (server.conf) do (
findstr /b "^#" %%a >nul 2>&1
if errorlevel 1 start /B check.bat %%a %%b %num% > check!num!.log
set /A num=num+1
)
)
endlocal
exit /b 2
脚本有两个问题 1)进程持续保存日志文件check0.log 2)在hc.bat中,我试图使用findstr来忽略以#开头的行,但它似乎没有工作
答案 0 :(得分:1)
<强> hc.bat
强>
展开num
,如!num!
(延迟扩展)
我修改了set /A
语句,以避免(立即)扩展到=
重定向>
表示覆盖数据。因此我将其更改为>>
以便追加数据
将cmd /C
插入start /B
参数中
在findstr
,/b
开关和^
是第一个字符。在搜索字符串中是redudant。我给了/r
开关强制正则表达式模式
没有使用第3个for /F
令牌,所以我只是将其删除了。
set num=0
setlocal ENABLEDELAYEDEXPANSION
for /f "tokens=1,2 delims=;" %%a in (server.conf) do (
findstr /r "^#" %%a >nul 2>&1
if errorlevel 1 start /B cmd /C "check.bat %%a %%b !num! >> check!num!.log"
set /A num=+1
)
)
endlocal
exit /b 2
<强> check.bat
强>
实际上你不需要延迟扩展(尽管没有任何伤害)。
set svr=%1
set log=%2
set num=%3
echo %svr% %log% %num%
copy /y NUL output%num%.tmp >NUL
powershell -command "& {Get-Content %log% | Select-Object -last 1}">> output%num%.tmp
type output%num%.tmp | findstr /m "STUCK" >nul 2>&1
if %errorlevel%==0 (goto action)
type %output%num%.tmp | findstr /m "shut" >nul 2>&1
if %errorlevel%==0 (goto action)
:action
type output%num%.tmp
del output%num%.tmp
exit /b 2