Skrypt do łączenia określonej linii wielu plików tekstowych w jeden plik tekstowy

1

Mam ~ 800 plików .txt. Potrzebuję wyodrębnić nazwę każdego pliku i jedną linię wewnątrz pliku i wyeksportować go do nowego pliku .txt.

Linia, którą muszę skopiować, zawsze zaczyna się od „System Boot Time:”

Chciałbym, aby w nowym pliku .txt było coś takiego:

txtfile1

Czas uruchamiania systemu: xx / xx / xxxx

txtfile2

Czas uruchamiania systemu: xx / xx / xxxx

txtfile3

Czas uruchamiania systemu: xx / xx / xxxx

itp...

Jakich poleceń mogę użyć, aby to zrobić?

Snugglasaurus
źródło
Ponadto nie powiedziałeś nam, jakiego systemu operacyjnego i języka skryptowego używasz.
DavidPostill
Korzystam z systemu Windows 7 i piszę skrypt .bat
Snugglasaurus
for /f, dir, findstr, echo powinienem zacząć.
DavidPostill
Indeks A-Z wiersza polecenia Windows CMD - Doskonałe odniesienie dla wszystkich rzeczy związanych z linią Windows cmd.
DavidPostill
Dziękuję Ci! Trudno jest dowiedzieć się, czego szukać, gdy jesteś nowy w skryptowaniu. Wiemy, czego chcemy w prostym języku angielskim, ale trudno jest przetłumaczyć go na język skryptowy.
Snugglasaurus

Odpowiedzi:

0

Potrzebuję wyodrębnić nazwę każdego pliku i jedną linię wewnątrz pliku i wyeksportować go do nowego pliku .txt.

Linia, którą muszę skopiować, zawsze zaczyna się od System Boot Time:

Chciałbym, aby w nowym pliku .txt było coś takiego:

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

Użyj następującego pliku wsadowego.

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

Przykładowy wynik:

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

Uwagi:

  • Wszystkie pasujące pliki *.txt są wyszukiwane w poszukiwaniu ciągu pasującego do `System Boot Time
  • Wyniki są wysyłane do new.txt
  • Jeśli chcesz biegać Merge.cmd wiele razy pamiętaj o del new.txt pierwszy.

Dalsze czytanie

DavidPostill
źródło
Łał! To wspaniale. Dziękuję bardzo - zrobiłeś dużo lepiej niż moje żałosne próby. Jedno pytanie - plik new.txt zwraca wszystkie wiersze zawierające słowa „System”, „Boot” lub „time”. Czy jest jakiś sposób, aby dopasować go do całego łańcucha? Dzięki!
Snugglasaurus
@ Snugglasaurus Nie ma problemu. Dzięki.
DavidPostill
Łał! Dziękuję Ci! Działa teraz płynnie !!
Snugglasaurus
0
  • Możesz użyć sed lub nawet grep aby wyprowadzić linię z pliku tekstowego.

    (oh, widzę, że jesteś w systemie Windows. Jeśli nie masz grep lub sed zainstalowany, powinieneś być w stanie korzystać findstr zamiast.)

  • Umieść to polecenie w pętli nad potrzebnymi plikami.
  • Przekieruj dane wyjściowe do pliku.
pyrocrasty
źródło