さまざまなIPアドレスのpingを持つログファイルの例。バッチを使用してテキストから特定の行を別のテキストに抽出する方法。
Pinging 10.62.36.161 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for 10.62.36.161:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
=================================================
Pinging src.g03.yahoodns.net [98.137.236.150] with 32 bytes of data:
Reply from 98.137.236.150: bytes=32 time=203ms TTL=43
Reply from 98.137.236.150: bytes=32 time=204ms TTL=45
Reply from 98.137.236.150: bytes=32 time=192ms TTL=43
Reply from 98.137.236.150: bytes=32 time=211ms TTL=43
Ping statistics for 98.137.236.150:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 192ms, Maximum = 211ms, Average = 202ms
私はpingさIPアドレスを含むRequest timed out
を持つすべての行を取得したいです。その後、別のファイルに行を印刷します。
どのようにすればいいですか?
コードが見つかりました。唯一の問題は、結果に3行の余分な行があることでした。 コード:私が得た
@echo off
set log=C:\Users\"name"\Desktop\log.txt
set test=C:\Users\"name"\Desktop\test.txt
setlocal EnableDelayedExpansion
set numbers=
for /F "delims=:" %%a in ('findstr /I /N /C:"Request" %log%') do (
set /A before=%%a-1, after=%%a+1
set "numbers=!numbers!!before!: !after!: "
)
(for /F "tokens=1* delims=:" %%a in ('findstr /N "^" %log% ^| findstr /B "%numbers%"') do echo %%b) > %test%
pause
結果:
Pinging 10.62.36.161 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
ECHO is off.
Reply from 8.8.8.8: bytes=32 time=6ms TTL=49
Reply from 8.8.8.8: bytes=32 time=5ms TTL=49
はどこでも私が間違っていましたか?
なぜあなたは道によって、あなたがいないよ( 'for'ループを通る'%ログ% 'を実行しています。 '%log%'の周りに括弧がありません)?あなたはまったくそれをする必要はありません。単に 'findstr/C:" Request "%log%>>%test%' – SomethingDark
は、ログファイルの代わりに 'ping'出力を直接解析する方がはるかに簡単です。たとえば、[この回答](http://stackoverflow.com/a/24965777/2152082) – Stephan
を参照@SomethingDarkあなたの返信に感謝します。私はコードを実行した。それは私にその言葉を含む行だけを与えました。私も回線のIPアドレスが必要です。助けてくれてありがとう! –