6

我正在尝试编写一个简单的批处理,它将遍历文件中的每一行,如果该行包含“apples”或“tomato”,则输出该行。

我有这段代码可以找到一个字符串并输出它,但我无法在同一批次中获得第二个。我还希望它在找到它们时回显这些线条。

@echo OFF

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

它需要找到包含“apples”或“tomato”的行,我可以使用我需要的两行轻松运行上面的代码,但我需要将这些行相互输出。

例如我需要:

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 中包含内容 Sumbitting Receipt 的某些行,如果它们还包含苹果或番茄,您想要提取所有这些行。此外,您想将苹果线一起输出,然后是番茄线。

这是我在没有实际 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 回答