0

tnsping の出力を保存するファイルがあります。このファイルには次のようなテキストが含まれます。

32 ビット Windows 用の TNS Ping ユーティリティ: バージョン 10.1.0.4.2 - 2013 年 8 月 12 日 11:28:33 の製品版

Copyright (c) 1997, 2003, Oracle. 全著作権所有。

使用されるパラメータ ファイル:
D:\oracle\Home_1\network\admin\sqlnet.ora


TNSNAMES アダプタを使用してエイリアスを解決しました
連絡を試みています (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =10.184.10.90)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = ORCL)))
OK (0 ミリ秒)

HOST、PORT、SERVICE_NAME の値をバッチ ファイルから抽出する必要があります。私が期待している値は10.184.10.90、HOST、1521PORT、およびORCLSERVICE_NAME です。

スジット

4

2 に答える 2

0
@ECHO OFF &SETLOCAL
FOR /f "delims=" %%a  IN ('findstr "Attempting to contact" "file"') DO SET "line=%%a"
SET "line=%line:*HOST=%"
FOR /f "tokens=2delims==)" %%a IN ("%line%") DO FOR %%b IN (%%a) DO SET "host=%%b"
SET "line=%line:*PORT=%"
FOR /f "tokens=2delims==)" %%a IN ("%line%") DO FOR %%b IN (%%a) DO SET "port=%%b"
SET "line=%line:*SERVICE_NAME=%"
FOR /f "tokens=2delims==)" %%a IN ("%line%") DO FOR %%b IN (%%a) DO SET "SERVICE_NAME=%%b"
ECHO HOST:%host% PORT:%port% SERVICE_NAME:%SERVICE_NAME%

これにはsedを使用することをお勧めします。

于 2013-08-12T06:33:18.580 に答える
0

) =これにより、「Attempting」という単語を含む行がフィルタリングされ、区切り文字とスペースで区切られたトークンに分割されます

行の左端からトークンを数えることができ、")= " で区切られた行の 9 番目、11 番目、および 14 番目のセクションは、変数に必要な項目です。各トークンは順番に適用さ%%a %%b %%cれます。

echoセクションを削除すると、変数が設定されます。

@echo off
for /f "tokens=9,11,14 delims=)= " %%a in ('type "file.txt" ^| find "Attempting"') do (
echo set "HOST=%%a"
echo set "PORT=%%b"
echo set "SERVICE_NAME=%%c"
)
pause

トークンを説明するには:

このような文字列が=abc = def=ghiあり、スペースと等号の区切り文字を適用すると= 、残っているセクションは "abc" "def" "ghi" (引用符なし) になり、セクションは「トークン」と呼ばれます。使用するtokens=2場合、この場合 %%a はに設定されますdef

Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =10.184.10.90)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = ORCL)))

)= とスペースの delims を使用する場合の元の例の上記の行には、以下のトークンがあり、それらをカウントすると、IP アドレスは 9 番目のトークンになります。区切り文字の目的のため、)= とスペースの区切り文字が消えていることに注意してください。

Attempting
to
contact
(DESCRIPTION
(ADDRESS
(PROTOCOL
TCP
(HOST
10.184.10.90
(PORT
1521
(CONNECT_DATA
(SERVICE_NAME
ORCL

それが明確であることを願っています。

于 2013-08-12T09:02:06.273 に答える