批处理脚本在执行后仍然保存文件

时间:2015-08-28 13:51:33

标签: windows batch-file

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来忽略以#开头的行,但它似乎没有工作

1 个答案:

答案 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