Скрипт для объединения определенной строки нескольких файлов .text в один файл .text


1

У меня ~ 800 .txt файлов. Мне нужно извлечь имя каждого файла и одну строку внутри файла и экспортировать его в новый файл .txt.

Строка, которую мне нужно скопировать, всегда будет начинаться с "System Boot Time:"

Я хотел бы, чтобы он выводил внутри нового файла .txt что-то вроде этого:

txtfile1

Время загрузки системы: xx / xx / xxxx

txtfile2

Время загрузки системы: xx / xx / xxxx

txtfile3

Время загрузки системы: xx / xx / xxxx

так далее...

Какие команды я могу использовать для этого?


Кроме того, вы не сообщили нам, какую операционную систему и язык сценариев используете.
DavidPostill

Я использую Windows 7 и пишу скрипт .bat
Snugglasaurus

for /f, dir, findstr, echo должен начать вас.
DavidPostill

Индекс A-Z командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с Windows cmd line.
DavidPostill

Спасибо! Трудно понять, что искать, когда вы новичок в написании сценариев. Мы знаем, чего хотим на простом английском, но трудно перевести это на скриптовый язык.
Snugglasaurus

Ответы:


0

Мне нужно извлечь имя каждого файла и одну строку внутри файла и экспортировать его в новый файл .txt.

Строка, которую мне нужно скопировать, всегда начинается с System Boot Time:

Я хотел бы, чтобы он выводил внутри нового файла .txt что-то вроде этого:

txtfile1
System Boot Time: xx/xx/xxxx
txtfile2
System Boot Time: xx/xx/xxxx
txtfile3
System Boot Time: xx/xx/xxxx

Используйте следующий пакетный файл.

Merge.cmd:

@echo off
setlocal 
for /f "useback delims=: tokens=1-3" %%i in (`findstr /C:"System Boot Time:" "*.txt"`) do (
  echo %%i >> new.txt
  echo %%j:%%k >> new.txt
)
endlocal

Пример вывода:

F:\test>type ?.txt

1.txt


System Boot Time: 01/01/1900

2.txt


System Boot Time: 01/02/2003

3.txt


System Boot Time: 02/03/2004

F:\test>merge

F:\test>type new.txt
1.txt
System Boot Time: 01/01/1900
2.txt
System Boot Time: 01/02/2003
3.txt
System Boot Time: 02/03/2004

Заметки:

  • Все файлы совпадают *.txt ищется строка, соответствующая `System Boot Time
  • Результаты выводятся на new.txt
  • Если вы хотите запустить Merge.cmd несколько раз не забудьте del new.txt первый.

Дальнейшее чтение


Вот Это Да! Замечательно. Большое вам спасибо - вы сделали намного лучше, чем мои жалкие попытки. Один вопрос - файл new.txt возвращает каждую строку, содержащую любое из слов «System», «Boot» или «time». Есть ли способ сделать так, чтобы он совпадал со всей строкой? Спасибо!
Snugglasaurus

@ Snugglasaurus Нет проблем. Благодарю.
DavidPostill

Вот Это Да! Спасибо! Это работает плавно сейчас !!
Snugglasaurus

0
  • Ты можешь использовать sed или даже grep вывести строку из текстового файла.

    (о, я вижу, что вы на Windows. Если у вас нет grep или же sed установлен, вы должны быть в состоянии использовать findstr вместо.)

  • Поместите эту команду в цикл над необходимыми файлами.
  • Перенаправить вывод в файл.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.