6

ファイル内のすべての行をループし、その行に「apples」または「tomato」が含まれている場合はその行を出力する単純なバッチを作成しようとしています。

1つの文字列を見つけて出力するこのコードがありますが、同じバッチで2番目の文字列を取得できません。また、それらを見つけたときに線をエコーさせたいです。

@echo OFF

for /f "delims=" %%J in ('findstr /ilc:"apple" "test.txt"') do (
echo %%J
)

「apples」または「tomato」のいずれかを含む行を見つける必要があります。必要な2行で上記のコードを簡単に実行できますが、行を相互に出力する必要があります。

たとえば、私は必要です:

apple
tomato
tomato
apple
tomato
apple
apple

いいえ:

apple
apple
apple

それから

tomato
tomato
tomato

前もって感謝します。

4

2 に答える 2

7

Findstrすでにあなたのためにこれをします:

@findstr /i "tomato apple" *.txt

*.txtワイルドカード(およびトマトアップルを必要な単語に置き換えます)に置き換えます。

出力を変更する必要がある場合forは、便利です:

@echo off

for /f %%i in ('findstr /i "tomato apple" *.txt') do @echo I just found a %%i
于 2012-10-11T16:01:12.727 に答える
1

私は問題を理解していると思います。diflog.txtにSumbittingReceiptというコンテンツが含まれている行がある場合、リンゴやトマトも含まれている場合は、そのような行をすべて抽出する必要があります。さらに、リンゴの線を一緒に出力し、その後にトマトの線を出力します。

これは、実際のWindowsコンピューターをテストせずに実行できる最善の方法であり、ここから微調整できますが、これは役立つ場合があります。

@echo OFF
setlocal enabledelayedexpansion

set apples=
set tomatos=

for /f "delims=" %%l in ('findstr /ilc:"Submitting Receipt" "diflog.txt"') do (

  set line=%%l

  for /f "eol=; tokens=1 delims=" %%s in ('echo !line! ^| findstr /ic:"apple"') do (
    set new_apple=%%s
    set apples=!apples!,!new_apple!
  )

  for /f "eol=; tokens=1 delims=" %%s in ('echo !line! ^| findstr /ic:"tomato"') do (
    set new_tomato=%%s
    set tomatos=!tomatos!,!new_tomato!
  )
)

echo Apples:

for /f "eol=; tokens=1 delims=," %%a in ('echo !apples!') do (
  set line_with_apple=@@a
  echo !line_with_apple!
)

echo Tomatos:

for /f "eol=; tokens=1 delims=," %%t in ('echo !tomatos!') do (
  set line_with_tomato=@@a
  echo !line_with_tomato!
)
于 2012-10-11T16:14:17.803 に答える