Я хочу найти все файлы в определенном каталоге и распечатать результаты в текстовом файле. Но я хочу, чтобы результаты были разделены знаком "|" на основе имени файла. Пример. Мои входные файлы - 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 ответа
@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
может быть включен в обработку ввода, поскольку он создается в том же каталоге, что и файлы данных.
Я также изменил имя каталога в соответствии с моей системой.
@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
вы можете определить несколько строк для поиска, разделив их пробелом.
Похожие вопросы
Новые вопросы
windows
Написание программного обеспечения, специфичного для операционной системы Microsoft Windows: API, поведения и т. д. ОБЩАЯ ПОДДЕРЖКА WINDOWS НЕ ПО ТЕМЕ. Вопросы поддержки можно задать на https://superuser.com