如何使用批处理文件从文本中提取文本

时间:2017-03-12 07:23:33

标签: batch-file cmd

大家好我尝试从文本文件中提取“SID”值,使用带有批处理文件的(for / f)提取SID后运行查询我需要为此命令分配SID值“alter system kill session 'SID_value' 所以请任何人知道如何使用它或任何其他解决方案都可以使用。

输出: (SID,S#= 5694,55482) => 55482 alter system kill session'55482'

query_result.txt:

SQL * Plus:2017年3月12日星期日09:28:16发布11.2.0.1.0版本

版权所有(c)1982,2010,Oracle。保留所有权利。

连接到: Oracle Database 12c企业版12.1.0.2.0版 - 64位生产 使用分区,Real Application Clusters,OLAP,Advanced Analytics 和实际应用程序测试选项

SQL> LOGCDE @ DOM \ AMANSAPP1(SID,S#= 5694,55482)阻止GENCDE @ DDOM \ SA = V M-MOTOR-WS(SID,S#= 959,36066)

LOGCDE @ DOM \ AMANSAPP1(SID,S#= 5694,55482)阻止GENCDE @ DDOM \ SA = V M-MOTOR-WS(SID,S#= 1025,36066)

SQL>与Oracle Database 12c企业版12.1.0.2.0版 - 64位生产版断开连接 使用分区,Real Application Clusters,OLAP,Advanced Analytics 和实际应用程序测试选项

1 个答案:

答案 0 :(得分:0)

@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "filename1=%sourcedir%\q42744864.txt"
FOR /f "delims=" %%a IN (
 'findstr /L /i /c:"is blocking " "%filename1%"'
 ) DO (
 FOR /f "tokens=2*delims=()" %%m IN ("%%a") DO (
  ECHO(%%n|FINDSTR /b /L /C:" is blocking ">NUL
  IF NOT ERRORLEVEL 1 (
   FOR /f "tokens=1-4delims==, " %%p IN ("%%m") DO (
    IF "%%p"=="SID" IF "%%q"=="S#" ECHO(alter system kill session '%%s'
   )
  )
 )
)

GOTO :EOF

您需要更改sourcedir的设置以适合您的具体情况。

我使用了一个名为q42744864.txt的文件,其中包含我的测试数据。

首先,使用findstr阅读该文件,以查找包含/i不区分大小写的/L字面/c:"this string"的行。 Ass点击%%a找到的每一行。

接下来,使用%%a(标记),并将括号之间的部分分配给%%m,将第二个括号后的部分分配给%%n

回复%%n进入findstr测试/b开始的行... / L和/ C:我已经介绍了。使用findstr - >nul处理findstr的输出会将errorlevel设置为找到字符串的0,否则为1。

如果errorlevel为0,则使用%%m= Space 标记,中括号的内容,以便SID应该转到%%pS#转到%%q,无论S#%%r后面的号码是多少,还是%%s所需的号码。

如果%%p%%q结帐,请显示所需的行。