我想搜索某个目录中的所有文件并将结果打印在文本文件中。但是我希望根据文件名用"|"分隔结果。例。我的输入文件是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
如何获得帮助!!
@ECHO OFF
SETLOCAL enabledelayedexpansion
SET "sourcedir=c:sourcedirabg"
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
文件可能包含在输入处理中的问题,因为它是在与数据文件相同的目录中创建的。
我还更改了目录名称以适合我的系统。
@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
命令中,您可以定义多个字符串以搜索用空格分隔它们。