0

例:Set var=findstr "name" temp.txt [temp.txt consist multiple lines , out of which one line says "my name is ABC"]後で行の最後の単語、つまりABCを見つけます

4

2 に答える 2

0

コマンドの出力をキャプチャするには、for /fループを使用します。詳細については、を参照help forしてください。

演習 1

の値%var%を の出力に設定するには、次のfindstrようにします。

for /f "delims=" %%I in ('findstr /i "name" "temp.txt"') do set "var=%%I"

次に、行の最後の単語が必要な場合は、基本的なforループを使用して の各単語をループできます%var%

for %%I in (%var%) do set "lastword=%%I"
set "var=%lastword%"

演習 2

あるいは、「name」を含む行が常に 4 トークンの長さになることがわかっている場合 (「My name is blah」のように)、次のfindstrように出力の 4 番目のトークンを単純にキャプチャできます。

for /f "tokens=4" %%I in ('findstr /i "name" "temp.txt"') do set "var=%%I"

以上です。 %var%には、 に一致した行の 4 番目の単語が含まれfindstrます。


演習 3

行が常に「私の名前は」で始まることがわかっているが、姓と名、または「ジョン・ジェイコブ・ジングルハイマー・シュミット」のような多くの名前の可能性が必要な場合は、次のようtokensに必要なものをキャプチャするために使用できます演習 2。

for /f "tokens=3*" %%I in ('findstr /i "name" "temp.txt"') do set "var=%%J"

今回%%Jの代わりにキャプチャしたことに注意してください。%%Iこれ%%Iは、トークン 3 (3 番目の単語) であり、while%%Jはそれ以降のすべて ( のワイルドカードtokens=3*) であるためです。


演習 4

または、名前が姓名である可能性があるが、その前に「My name is」が付くことがわかっている場合は、可変部分文字列置換を使用して「My name is」の部分を削除できます。

for /f "delims=" %%I in ('findstr /i "name" "temp.txt"') do set "var=%%I"
set "var=%var:My name is =%"

これにより、 の値から「私の名前は」が取り除かれ、%var%「John Smith」が残ります。


演習 5

「name」を含む行が同じ数の単語であると数えられない場合 (たとえば、「Hi there! My name is」または「Hello! My name is」)、可変部分文字列置換とワイルドカードを使用できます。これは、名前が 1 語以上であるかどうか、および「name is」の前の内容が異なるかどうかに関係なく機能するはずです。

for /f "delims=" %%I in ('findstr /i "name" "temp.txt"') do set "var=%%I"
set "var=%var:*name is =%"
于 2013-04-08T13:12:29.657 に答える
0

他のプログラミング言語と同様に、バッチでも変数をメモリに保存して、さらに使用することができます。

@echo off&setlocal

set "file=temp.txt"
set "search=name"

:: clear the local environment
for /f "delims==" %%i in ('set $ 2^>nul') do set "%%i="

:: find the lines containing %search%
for /f "delims=" %%i in ('findstr "%search%" "%file%"') do set "$%%i=%%i"

:: show the line variables
set $
于 2013-04-08T13:56:38.903 に答える