Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 22.03.2019
Сообщений: 12

Найти в файлах определенную строку и отталкиваться от нее для выгрузки другой строки

09.09.2021, 20:16. Показов 2629. Ответов 7

Студворк — интернет-сервис помощи студентам
Добрый день! такая ситуация: Есть батник, который собирает из всех файлов лежащих в той же директории что и он определенные строки (в данном случае пятидесятую строку (пропускает 49)) и формирует файл itog.txt, где в начале каждой строки название файла и после вытянутая строчка. В общем собирает все пятидесятые строки изо всех файлов в папке и приписывает в начало название файла из которого взята строка.
Однако нужные строки не всегда имеют одинаковый порядковый номер.
Поэтому хочется, чтобы скрипт привязывался не к определенному номеру строки, а искал в файлах строку содержащую определенный текст и отталкивался от нее (вверх или вниз) уже на фиксированное число строк
Вот сам скрипт:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@echo off
 
setlocal EnableExtensions DisableDelayedExpansion
 
set "SourceFolder=%~dp0"
del "%SourceFolder%itog.txt" 2>nul
 
for %%I in ("%SourceFolder%*.txt") do call :ProcessFile "%%I"
endlocal
goto :EOF
 
:ProcessFile
for /F usebackq^ skip^=49^ delims^=^ eol^= %%L in (%1) do (
»"%SourceFolder%itog.txt" echo %~nx1: %%L
goto :EOF
)
goto :EOF
Пример файла:

123 1324 13431
13234 2311
Hello world!!!
143123 131
123412 12341234 123
-- batch code
32423 34213 13 124

В данном случае хочется прицепиться к строке "batch code" и вытащить из файла строку на 3 выше, то есть "Hello world!!!"
Во всех файлах строка "Hello world!!!" будет выше "batch code" на 3 строчки, но абсолютные их позиции могут быть выше или ниже.

Большое спасибо!!!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.09.2021, 20:16
Ответы с готовыми решениями:

Вернуться на определенную строку вывода и выводить, например, справа от нее?
Поиск не помог. Можно ли вернутся на определенную строку вывода и выводить, например, справа от нее?

Для каждой строки сформировать новую строку, поместив в нее те коды исходной строки, в которых столько же единиц, сколько в первом коде
Кривизна моих рук очень сильно сказывается на работу прог, но я надеюсь, что вы мне поможете исправиться. В программе есть косяки и я не...

Найти в текстовом файле строку по заданному слову и заменить ей определённую часть строки в другом файле
Всех с Новым Годом! Наверное избитая тема, но все же... Задача такая: Существует два файла: log.txt и run.bat. Необходимо в log.txt...

7
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
09.09.2021, 20:59
romann1601, вечер добрый! Допутилиты разрешено использовать?

Добавлено через 30 секунд
Содержимое файлов содержит кириллицу?
0
0 / 0 / 0
Регистрация: 22.03.2019
Сообщений: 12
09.09.2021, 21:13  [ТС]
Доп утилиты, к сожалению, нельзя использовать(
Да, кириллица в файлах присутствует.
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
09.09.2021, 22:39
Лучший ответ Сообщение было отмечено romann1601 как решение

Решение

Версия powershell какая установлена?

Добавлено через 1 час 20 минут
romann1601, попробуйте этот код:
Windows Batch file
1
@powershell -executionpolicy bypass -command "get-childitem *.txt -file | Select-String -SimpleMatch '-- batch code' -List | foreach {"""$(split-path $_.path -leaf):$((Get-Content $_.path)[[int]$_.linenumber-3-1])""" | out-file itog.txt -Encoding default -Append}"
1
6977 / 2869 / 1102
Регистрация: 06.06.2017
Сообщений: 9,748
09.09.2021, 23:22
Цитата Сообщение от romann1601 Посмотреть сообщение
прицепиться к строке "batch code" и вытащить из файла строку на 3 выше
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
var strX = 'batch code', out = 'result.txt', oFile, name, str, text = ''
with (WSH.CreateObject('Scripting.FileSystemObject')){
  for (oFile = new Enumerator(getFolder(getAbsolutePathName('')).files); !oFile.atEnd(); oFile.moveNext()){
    name = oFile.item().name
    if(name != WSH.ScriptName){
      str = openTextFile(name).readAll().match(eval('/[^\\r\\n]+(?=([^\\r\\n]*\\r?\\n){3}'+ strX +'[\\r\\n])/'))
      if(str){text += '\r\n' + name + ': ' + str[0]}
    }
  }
  if(text!=null){with(createTextFile(out,1)){write(text.slice(2));close()}
  WSH.CreateObject('Shell.Application').ShellExecute(out)}
}
1
 Аватар для volodin661
6686 / 2278 / 347
Регистрация: 10.12.2013
Сообщений: 7,875
10.09.2021, 05:28
при windows 10 и задействованным WSL:

Bash
1
vim -es  -c 'argdo g/batch code/ -3 print'  -c quit *.bat
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
11.09.2021, 02:09
и как это (хоть и со скрипом) можно решить и на cmd
Windows Batch file
1
2
3
4
5
6
7
@echo off
set "f=file.txt"
set "ptr=batch code"
 
<"%f%" (for /f "delims=[]" %%a in ('find /n /v ""^|find /i "%ptr%"') do @set /a nLine3=%%a-3)
<"%f%" (for /f "tokens=2 delims=[]" %%a in ('find /n /v ""^|find "[%nLine3%]"') do @echo %%a)
pause
Добавлено через 1 минуту
и да, весь этот код только для одного (поиска в файле) файла.
1
6977 / 2869 / 1102
Регистрация: 06.06.2017
Сообщений: 9,748
11.09.2021, 06:43
Цитата Сообщение от alpap Посмотреть сообщение
код только для одного (поиска в файле) файла.
Мысль понятна. Можно и для нескольких:
Windows Batch file
1
2
3
4
5
@echo off&setlocal enabledelayedexpansion
(for /f "delims= eol=" %%i in ('dir/a-d/b^|findstr/bevc:"%~nx0"') do (
  for /f "tokens=1 delims=:"  %%c in ('findstr/benc:"batch code" "%%i"') do (set /a c=%%c-3
  for /f "tokens=1* delims=:" %%r in ('findstr/n . "%%i"^|findstr/b !c!:') do echo %%i: %%s)
))>result.txt
Хотя не, так с '!' в строке фигня выходит...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.09.2021, 06:43
Помогаю со студенческими работами здесь

Несколько txt файлов: в каждом нужно заменить определенную строку другой строкой
Всем Привет! У меня вопрос: Есть несколько txt файлов, в каждом нужно заменить определенную строку другой строкой. Например есть...

Покрасить строку в другой цвет при нажатии на нее
Добрый день! Создал таблицу.Пытаюсь при нажатии на строку делать так что бы строка окрашивалась в другой цвет(цвет tomato). Вот...

Скопировать строку в другую строку заданной длины и размещает текст первой строки по центру другой строки
Функция копирует строку в другую строку заданной длины и размещает текст первой строки по центру другой строки. Так звучит задание. Все...

Из входного потока вводится произвольное число строк. Для каждой строки сформировать новую строку, поместив в нее группы символов
Доброй ночи! Нужна помощь в написании программы на си, сам, к сожалению, слабо разбираюсь в теме. Из входного потока вводится...

Необходимо в текстовом файле найти определенную строку, в которой имеется спец.символ и удалить строку
К примеру в файле есть записи: Привет Привет Хороший День Мне нужно, что бы запись с символом &quot;Hi&quot; была удалена, или с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru