chgs2011
Goto Top

Textdateien TXT in allen Verzeichnissen suchen und zusammenfassen

Hallo,

ich habe ein Verzeichnis mit vielen Unterverzeichnissen, in denen viele TXT-Dateien liegen.

Ich wollte mit diesem Script alle TXT zusammenfassen zu einer.

Die TXT-Dateien enthalten mehrzeilige Texte und dürfen nicht verändert werden, nur aneinander zusammengefasst werden.


Wo liegt das Problem?

@ECHO OFF

setlocal

set "WorkingDir=C:\TEST"  
set "InFiles=%WorkingDir%\*.txt"  
set "OutFile=%WorkingDir%\Ergebnis.txt"  

type NUL > "%OutFile%"  

for %%f in ("%InFiles%") do (  
  >>"%OutFile%" <NUL set /p "=%%f@"  

  for /f "usebackq delims=" %%l in ("%%f") do (  
    >>"%OutFile%" <NUL set /p "=%%l@"  
  )

  >>"%OutFile%" echo.  
)

endlocal
exit /b

Vielen Dank

Content-ID: 321405

Url: https://administrator.de/contentid/321405

Ausgedruckt am: 08.11.2024 um 03:11 Uhr

131381
131381 18.11.2016 aktualisiert um 14:15:44 Uhr
Goto Top
PS Onliner
gci 'c:\Test' -Filter *.txt -recurse | %{gc $_.Fullname -ReadCount 1000 | Add-Content 'c:\Test\Ergebnis.txt'}  
Gruß
chgs2011
chgs2011 18.11.2016 um 16:28:59 Uhr
Goto Top
Was ist das?

Suche bestenfalls eine Batch-Lösung.
beidermachtvongreyscull
beidermachtvongreyscull 18.11.2016 um 17:16:45 Uhr
Goto Top
Endoro
Endoro 19.11.2016 aktualisiert um 08:55:52 Uhr
Goto Top
Hey,

Zitat von @chgs2011:

Wo liegt das Problem?


Das solltest du uns sagen. Was passiert denn bei deinem Code (sorry, aber fremde Programme zu lesen macht mich immer wuschig).

PS: was stört dich an der Antwort von Dave?

Gruß, Endoro
chgs2011
chgs2011 19.11.2016 um 11:29:39 Uhr
Goto Top
Es wird eine Ergebnis.txt angelegt, aber ohne Inhalt ... es werden wohl die Files nicht gefunden.

Von Dave, verstehe nicht was das sein soll.

Ich benötige einfach nur ein einfaches Batch Script, das mir alle TXT Files in Unterordner zu einer TXT inhaltlich zusammenfast.

Habe dazu leider nichts gefunden.
Endoro
Endoro 19.11.2016 um 15:01:53 Uhr
Goto Top
Hey,

Dave ist der Autor dieser Antwort. Ich habe die nicht überprüft, weil das bei ihm nicht nötig ist. Also noch mal übersetzt:

@echo off & setlocal
copy nul blah.txt >nul
for /d %%F in (level*) do copy /b blah.txt + "%%F\*.txt" >nul  

"level" ist der Startordner.
Melde dich, wenn es nicht hinhaut face-smile
Gruß, Endoro
77559
77559 20.11.2016 um 02:24:04 Uhr
Goto Top
Hallo,
deine Batchdatei tut doch das was du beschrieben hast, allerdings fasst es alle Dateiinhalte zu einem langen String zusammen (Set /P) Alle Zeilenenden werden duch ein @-Zeichen ersetzt.
Ausserdem ist es niemals gut eine Datei mit gleicher Extension im Scanbereich zu erzeugen. Also in Zeile 07 besser Ergebnis.temp nehmen und ggfs später umbenennen.
Zeile 12 gibt den jeweiligen Dateinamen aus, wenn das nicht erwünscht ist - weglassen. Wenn die Zeilen ganz normal ausgegeben werden sollen Zeile 15 ersetzen durch
 >>%OutFile% Echo:%%l
chgs2011
chgs2011 20.11.2016 aktualisiert um 12:19:42 Uhr
Goto Top
Danke, ich werde es mal versuchen!


EDIT:
OK, konnte doch nicht abwarten und habe es gleich getestet.

Jetzt habe ich es verstanden, sämtliche Unterverzeichnisse müssen ebenfalls alle mit "LEVEL" beginnen dann, sonst klappt dies nicht.
MMhhh... meine Unterverzeichnisse heißen unterschiedlich ... wenn ich diese umbenennen müsste, hätte ich kaum etwas gewonnen face-sad

Könnte man nicht in die FOR-Schleife ein Startverzeichnis angeben und alle Unterverzeichnisse unabhängig von Bezeichnung ansprechen?
Endoro
Endoro 20.11.2016 um 14:45:12 Uhr
Goto Top
Hey,

ich geb's jetzt auf und geh weinen.
Ich fasse das alles nicht mehr.
Die Welt ist mir zu geil geworden.

Hoffentlich kommt mein Kind darin noch klar.

Gruß, Endoro
chgs2011
chgs2011 20.11.2016 um 20:46:49 Uhr
Goto Top
Problem gelöst, es war nicht sauber erklärt:

@echo off & setlocal
copy nul ergebnis.txt >nul
for /d %%F in (C:\TEST\*) do copy /b ergebnis.txt + "%%F\*.txt"  


Wichtig war nur, dass man "level*" richtig einsetzt mit zB "C:\TEST\*",
dann sind die Verzeichnisnamen egal.


Danke
Endoro
Endoro 21.11.2016 aktualisiert um 00:50:21 Uhr
Goto Top
Hey,

Zitat von @chgs2011:

Problem gelöst, es war nicht sauber erklärt:


sei mir bitte nicht böse, jeder hat mal einen "Durchhänger".
Ich wollte und will Dich nicht beleidigen.

Gruß, Endoro
chgs2011
chgs2011 22.11.2016 um 14:25:25 Uhr
Goto Top
Ein kleines Problem ergab sich jetzt dennoch ...

Ich habe mehrere Verzeichnisebenen, 2-3 Stück ... aktuell klappt das Script nur mit einer Ebene.

Gibt es keinen Parameter, der alle Ebenen durchsucht ab Startverzeichnis?
Konnte nichts dazu finden ...
131381
131381 22.11.2016 aktualisiert um 14:44:50 Uhr
Goto Top
dir /b /s /a-d
mit FOR-Loop drum ist dein Freund.
chgs2011
chgs2011 22.11.2016 um 15:30:52 Uhr
Goto Top
mmmhhhhh .... klappt nicht face-sad


SET	"SrcDir=C:\"  
copy nul test.txt >nul
for /d %%F in (dir /b /s /a-d "%SrcDir%\*") do copy /b test.txt + "%%F\*.txt"  
131381
131381 22.11.2016 aktualisiert um 15:35:53 Uhr
Goto Top
Falsch, ein For /f Loop kein for /d
Und in %%F steht dann kein Ordner sondern ein Dateipfad!

Man man man ist schon schwer die Suche zu bedienen was ...
https://www.google.de/search?q=batch+for+beginners
chgs2011
chgs2011 22.11.2016 um 16:18:40 Uhr
Goto Top
Schön wenn mans kann, es werden aber nur leere Dateien angelegt ...
131381
131381 22.11.2016 aktualisiert um 16:44:31 Uhr
Goto Top
Zitat von @chgs2011:
Schön wenn mans kann, es werden aber nur leere Dateien angelegt ...
Kein Wunder...Tutorial zur FOR-Schleife
@echo off
set "SrcDir=C:\Daten"  
copy nul test.txt >nul 
for /f "delims=" %%a in ('dir /b /s /a-d "%SrcDir%\*.txt"') do copy /b test.txt + "%%a"  
chgs2011
chgs2011 24.11.2016 um 17:56:48 Uhr
Goto Top
Wow, sehr cool ... klappt perfekt jetzt, VIELEN DANK!

Hinten " + "%%a"" durfte ich auch keinen Dateityp anhängen, auch gut zu wissen.


Die Creme de la creme wäre natürlich noch (das Problem trat heute auf), wenn man per Batch falsch kodierte Texte gleich in ANSI kodieren könnte.
131381
131381 24.11.2016 aktualisiert um 18:56:01 Uhr
Goto Top
Zitat von @chgs2011:

Wow, sehr cool ... klappt perfekt jetzt, VIELEN DANK!

Hinten " + "%%a"" durfte ich auch keinen Dateityp anhängen, auch gut zu wissen.
ein for /? hätte es dir ebenso gezeigt!

Die Creme de la creme wäre natürlich noch (das Problem trat heute auf), wenn man per Batch falsch kodierte Texte gleich in ANSI kodieren könnte.
Da nimmst du lieber gleich die Powershell. Per Batch bräuchtest du externe Tools wie iconv etc.

Dann bitte noch ein "gelöst" hinten dran.

Gruß