我敢打赌,这太简单了,但我不能把它放在一起:
在运行脚本时使用批处理文件时,如何计算受影响的行将其置于日志文件中。
xxx_proc.bat
@echo off
echo Running script in THENW
echo %DATE% tprdcr.sql executed > Logfile.txt
isql -UEMXXX2 -PEMXXX2 -SKXXXXXXDB02 -Jcp8x50 -w20x00 -itprdcr.sql >> Logfile.txt
echo tprdcr.sql Generated successfully
pause
EXIT /B
LOGFILE.TXT
结果非常多,所以我只想显示 [nn rows affected] 。此外,如果一个更新语句中出现错误,它将绕过计数并显示错误。
答案 0 :(得分:0)
如果您希望原始日志文件保持不变,那么您可以使用:
@echo off
@setlocal EnableDelayedExpansion
::Other code here
set count=0
for /f "tokens=*" %%r in ('type Logfile.txt ^| findstr /i "row affected"') do (
for /f "tokens=1 delims=^( " %%c in ("%%r") do set /a count+=%%c
)
echo Total rows affected: !count!
echo Total rows affected: !count!>>Logfile.txt
pause
exit /b
可选地,如果您想绕过将每个受影响的行写入日志文件,并且只写一行说明受影响的行数,您可以改为使用它:
@echo off
@setlocal EnableDelayedExpansion
::Other code here
set count=0
for /f "tokens=*" %%r in ('isql -UEMXXX2 -PEMXXX2 -SKXXXXXXDB02 -Jcp8x50 -w20x00 -itprdcr.sql ^| findstr /i "row affected)"') do (
for /f "tokens=1 delims=^( " %%c in ("%%r") do set /a count+=%%c
)
echo Total rows affected: !count!
echo Total rows affected: !count!>>Logfile.txt
pause
exit /b
希望这有帮助。
答案 1 :(得分:0)
我怀疑您可以使用.sql文件修改输出以使您的生活更轻松。但是如果你想现在使用日志文件......
在您展示错误的内容之前,我们无法建议如何绕过错误。
这是一个获得总计数的纯批处理方法:
set /a cnt=0
for /f "delims=( " %%N in (
'findstr /c:"^(1 row affected)" /c:"^([0-9][0-9]* rows affected)" "Logfile.txt"'
) do set /a cnt+=%%N
echo %%N rows affected
您也可以使用我的JREPL.BAT utility:
jrepl "\((\d+) rows? affected\)" "total+=Number($1);false" /jmatch /jbeg "total=0" /jend "output.WriteLine(total+' rows affected')" /f "Logfile.txt"
如果需要捕获变量中的总数,可以将上述命令放在FOR / F循环中:
for /f %%N in (
'jrepl "\((\d+) rows? affected\)" "total+=Number($1);false" /jmatch /jbeg "total=0" /jend "output.WriteLine(total+' rows affected')" /f "Logfile.txt"'
) do set total=%%N
echo %total%