Я хочу найти все файлы в определенном каталоге и распечатать результаты в текстовом файле. Но я хочу, чтобы результаты были разделены знаком "|" на основе имени файла. Пример. Мои входные файлы - 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

КАК ПОЛУЧИТЬ ПОМОЩЬ !!

0
Hansa 9 Мар 2014 в 20:08

2 ответа

Лучший ответ
@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 может быть включен в обработку ввода, поскольку он создается в том же каталоге, что и файлы данных.

Я также изменил имя каталога в соответствии с моей системой.

1
Magoo 9 Мар 2014 в 21:33
Почти готово, но 2-й результат добавления файла в первую строку A.txt Apple A.txt Apple|Banana|GrapesB.txt:Apple B.txt Banana|Grapes
 – 
Hansa
9 Мар 2014 в 21:45
Пожалуйста, проверьте результат добавления второго файла в первую строку
 – 
Hansa
9 Мар 2014 в 21:57
@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
Aacini 9 Мар 2014 в 21:06
Как отправить это в выходной текстовый файл
 – 
Hansa
9 Мар 2014 в 21:21
Между файлами нет условий, каждый файл содержит какие-либо фрукты, но результат должен передаваться по конвейеру, а не в строке.
 – 
Hansa
9 Мар 2014 в 21:30