FINDSTR批处理文件中的结果问题

时间:2014-03-09 16:08:46

标签: windows batch-file batch-processing findstr

我想搜索某个目录中的所有文件,并在文本文件中打印结果。 但我希望结果以'|'分隔基于文件名。 例。 我的输入文件是 A.txt和B.txt等......

我的批处理脚本

@echo off
setlocal
pushd D:\Source
findstr  /c:"Apple" /c:"Banana" /c:"Grapes" *.txt > Results.txt
popd
endlocal

结果就像这样

a.txt Apple
a.txt Banana
b.txt Banana
b.txt Grapes

但我想要这样的结果

a.txt Apple|Banana
b.txt Banana|Grapes

如何获得帮助!!

2 个答案:

答案 0 :(得分:1)

@echo off
setlocal EnableDelayedExpansion

cd D:\Source
set "filename="
for /F "tokens=1* delims=:" %%a in (
       'findstr "Apple Banana Grapes" *.txt') do (
   if not defined filename (
      set /P "=%%a %%b" < NUL
      set "filename=%%a"
   ) else if "!filename!" equ "%%a" (
      set /P "=|%%b"
   ) else (
      echo/
      set /P "=%%a %%b" < NUL
      set "filename=%%a"
   )
)
echo/

以前代码的一些注释:

  • endlocal命令在最后没有必要。
  • pushd命令和结尾处的popd可能会被setlocal替换为cd,而不是findstr
  • 在{{1}}命令中,您可以定义多个字符串以搜索它们与空格分隔。

答案 1 :(得分:1)

@ECHO OFF
SETLOCAL enabledelayedexpansion
SET "sourcedir=c:\sourcedir\abg"
SET "resultfile=results.xtx"
pushd %sourcedir%
DEL %resultfile% 2>nul
SET "filename="
FOR /f "tokens=1*delims=:" %%r IN ('findstr  "Apple Banana Grapes" *.txt') do (
 IF "!filename!"=="%%r" (
  SET "line=!line!|%%s"
 ) ELSE (
   IF DEFINED filename >>%resultfile% ECHO(!filename! !line!
   SET "filename=%%r"
   SET "line=%%s"
 )
)

IF DEFINED filename >>%resultfile% ECHO(!filename! !line!

TYPE %resultfile%

popd

GOTO :EOF

我将目标文件名设置为变量,以避免输入处理中可能包含results.txt文件的问题,因为它是在与数据文件相同的目录中创建的。

我还更改了目录名称以适合我的系统。