Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Verschiedene Textdateien aus einem Ordner zusammen fügen mit Überschrift der entsprechenden TXT-Datei

Mitglied: ZTommy

ZTommy (Level 1) - Jetzt verbinden

07.11.2019, aktualisiert 11:17 Uhr, 297 Aufrufe, 20 Kommentare

Hallo Leute

ich bin neu hier und ich weiß nicht 100%ig, ob diese frage in dieser Form schon einmal gestellt wurde.
Ich würde mich freuen, wenn mir jemand helfen könnte. ich habe leider mit PowerShell noch keine Erfahrung machen können und ich habe vielleicht ein spezielles Thema o. Anliegen. Ich habe einen Windows Server 2012R2 und die Frage ist beruflich.

Folgendes:

Ich habe ca. 20 Verzeichnisse mit jeweils einer X-Anzahl an TXT-Dokumenten
Die Verzeichnisnamen (der Ordner) und der Inhalt, die TXT-Dokumente, haben immer denselben Namen und ändern sich nicht.
Im Ordner sind ca. 30 TXT-Dateien, wovon ich 14 TXT-Dateien nur benötige.
Das bleibt aber gleich und ändert sich nicht, wie schon erwähnt.

Bsp:

Ordner Baum
Ordner Tisch
Ordner Stift
Ordner Heft usw....

In diesen Ordnern befinden folgende TXT-Dateien:

Im Ordner Baum -> grün.txt
blau.txt
rot.txt
gelb.txt usw.....
Aufbau TXT:
Normale textwerte, können aber auch Tabellenwerte enthalten.
Da ja der Inhalt kopiert wird, sollte der Aufbau ja nicht verändert werden.

Auf Arbeit sind diese Daten in einer Txt-Datei enthalten.
dies sind unteranderem Code-Logs o. Event-Logs o. anderes.
Wie gesagt, die Ordnernamen ändern sich nicht und die namen der TXT-Dateien ändern sich nicht.
Außer, der Inhalt.

Aufgabe:

ich muss den Inhalt aus den TXT-Dateien (grün, blau, rot, gelb usw...) in eine Txt-Datei zusammen fügen und in ein anderes zentrales Verzeichnis ablegen. Bis dahin wahrscheinlich einfach für Euch

Was ich aber jetzt benötige ist, wenn die TXT-Dateien zusammen gefügt werden, das der Name der angefügten TXT-Datei als Überschrift zur optischen Trennung erscheint.
Sprich, ich habe eine TXT Datei mit dem gesamten Inhalt aller als Beispiel oben genannten Dateien mit einer Überschrift.

Die Überschrift / Trennung inerhalb der Datei ist dann der name der ursprünglichen Datei.

Also, ich habe jetzt 20 TXT-Dateien zusammen gefügt zu einer und suche nach dem Wort: rot.txt.
Dadurch lande ich ja dann an die entsprechende Stelle, wo das rot.txt anfängt.
Oder meinetwegen, wo der inhalt der Event.log anfangen würde.

Das ist mein Ziel oder aktuell ehr der Wunsch.

Ich hoffe, Ihr könnt mir folgen...
Etwas kompliziert zu formulieren.

Ich danke schon einmal vorab und hoffe, es kann mir jemand helfen
Vielen lieben Dank
Mitglied: erikro
07.11.2019 um 12:24 Uhr
Moin,

wenn ich Dich richtig verstanden habe, dann liegen alle Dateien in einem Verzeichnis und alle txt daraus werden auch benötigt. Unterverzeichnisse gibt es keine. Richtig? Dann ist das nicht weiter schwer:

01.
PARAM (
02.
   $quellpfad,
03.
   $zieldatei
04.
)
05.

06.
$files = get-childitem $quellpfad\*.txt
07.

08.
foreach($file in $files) {
09.
  
10.
    $content = get-content $file
11.
    out-file -inputObject $file.fullname -filepath $zieldatei -append
12.
    out-file -inputObject $content -filepath $zieldatei -append
13.
    $content = ""
14.
}
Aufruf wäre dann zu Beispiel:

01.
scriptname.ps1 -quellpfad c:\daten\baum -zieldatei \\server\zentraleAblage\baum.txt
(Nicht getestet, keine Zeit)

hth

Erik
Bitte warten ..
Mitglied: ZTommy
07.11.2019 um 14:08 Uhr
und hier auch nochmal ein Hallo und danke Dir

sehr schön...

Auch hier nochmal ein paar Eckdaten:

1. das Verzeichnis bleibt immer gleich
2. es sind eventuell auch nur bestimmte TXT-Dateien, die benötigt werden (von 20 nur 15 Dateien)
diese muss ich dann einzeln aufführen
3. es gibt keine Unterverzeichnisse, selbst wenn, ist dies unrelevant

mal ein Beispiel, wie die TXT-Datei vom Inhalt her aussehen muss:


Im Ordner Baum gibt es folgende TXT-Dateien:
grün.txt
blau.txt
rot.txt
gelb.txt usw....

in der erstellten TXT muss es nun so aussehen:

Name der eingepflegten TXT:

grün.txt (als Überschrift / Marker)
Text / Inhalt der grün.TXT
Text
Text
Text..........

blau.txt
Text
Text
Text
Text...........

rot.txt
Text
Text
Text
Text..........

Das muss dann alles in einer bzw. der zusammengeführten TXT stehen.

Ich hoffe, ist jetzt besser erklärt....
Ich denke mal, hier muss mit vielen Schleifen gearbeitet werden...

Danke und Grüße
Bitte warten ..
Mitglied: erikro
07.11.2019 um 14:56 Uhr
Hast Du das Skript, das ich schnell geschrieben habe, mal ausprobiert. Das sollte das tun, was Du willst.
Bitte warten ..
Mitglied: ZTommy
08.11.2019 um 10:13 Uhr
Hallöchen

sorry, das ich jetzt erst schreibe...
musste privat gestern "weg"...

ja, habe versucht noch zu testen...
Aber bekomme es nicht hin.
Leider noch nie mit zu tun gehabt...


Frage:

1. muss ich hier den Pfad angeben o. bleibt das so?

$quellpfad,
$zieldatei

2. wird der große Code seperat abgespeichert und das: scriptname.ps1 -quellpfad c:\daten\baum -zieldatei \\server\zentraleAblage\baum.txt
seperat gestartet??

Danke nochmal für deine Hilfe
ist heutzutage leider nicht mehr so häufig...

Grüße
Bitte warten ..
Mitglied: erikro
08.11.2019 um 10:44 Uhr
Moin,

Zitat von ZTommy:
sorry, das ich jetzt erst schreibe...
musste privat gestern "weg"...

Soll vorkommen.

Frage:

1. muss ich hier den Pfad angeben o. bleibt das so?

$quellpfad,
$zieldatei

Das bleibt so. Das sind Parameter, die Du beim Aufruf des Skripts angeben musst.

2. wird der große Code seperat abgespeichert

Ja

und das: scriptname.ps1 -quellpfad c:\daten\baum -zieldatei \\server\zentraleAblage\baum.txt
seperat gestartet??

Ja. Dazu noch ein Hinweis: Im Standard ist die Ausführung von Skripts auf der PS ausgeschaltet. Was dahinter steckt und wie Du das änderst, erfährst Du hier: https://www.windowspro.de/script/ausfuehrungsrichtlinien-executionpolicy ...

Danke nochmal für deine Hilfe

Gerne.

Liebe Grüße

Erik
Bitte warten ..
Mitglied: ZTommy
08.11.2019 um 12:53 Uhr
hallo Eric

einen herzlichen Dank nochmal an Dich

ich werde versuchen das heute bzw. am WE nochmal zu testen bzw. mir deinen Link anschauen.
Natürlich gebe ich auch nochmal Feedback

Ich danke Dir
Bitte warten ..
Mitglied: ZTommy
08.11.2019 um 15:36 Uhr
Hallöchen

ich konnte nun mal testen und habe ein Problem beim ausführen.

ich bekomme folgende Fehlermeldung:

is not recognized as the name of a cmdlet function script file or operable program

Suche gerade im Netz, was das sein könnte.

Bei meinen Rechten bin ich mir nicht so sicher, das ich diese nicht haben sollte.
Grund: ich habe noch ein anderes Script mit Power Shell, womit ich mir einen Report per Mail automatisch vom Server zukommen lassen kann.
Auch dafür benötige ich Rechte. Das habe ich dadurch schon mal prüfen müssen.

Was ich mir vorstellen kann ist, dass ich eventuell das Skript von einem falschen "Ort" ausführe.
Weiß es aber nicht. Bin auf der Suche.
Vielleicht sehe ich auch gerade den Wald vor lauter bäumen nicht und denke zu kompliziert.

Aber für Dich das erstmal als Feedback

ich Danke Dir und wünsche nen schönen Feierabend
Bitte warten ..
Mitglied: erikro
08.11.2019, aktualisiert um 15:48 Uhr
Moin,

Zitat von ZTommy:
is not recognized as the name of a cmdlet function script file or operable program

Das vor der Meldung, nämlich was nicht als Befehl erkannt wurde, ist das interessante. Das ist meist ein Tippfehler. Ich konnte in meinem Skript aber keinen entdecken.

<edit>Enthalten Deine Pfade zur Quelle oder zum Ziel Leerzeichen? Dann musst Du die Angabe in Anführungszeichen setzen.</edit>

Liebe Grüße

Erik
Bitte warten ..
Mitglied: calendar
08.11.2019, aktualisiert 09.11.2019
Zitat von ZTommy:
is not recognized as the name of a cmdlet function script file or operable program

Wird vermutlich daran liegen das der vollständige Pfad zum Skript oder das führende .\ für den aktuellen Pfad fehlen, fehlt hier ja im geposteten Aufruf:

Zitat von erikro:
Aufruf wäre dann zu Beispiel:

01.
scriptname.ps1 -quellpfad c:\daten\baum -zieldatei \\server\zentraleAblage\baum.txt

01.
.\scriptname.ps1 -quellpfad "c:\daten\baum" -zieldatei "\\server\zentraleAblage\baum.txt"
01.
"C:\Pfad\scriptname.ps1" -quellpfad "c:\daten\baum" -zieldatei "\\server\zentraleAblage\baum.txt"
Bitte warten ..
Mitglied: calendar
11.11.2019, aktualisiert um 11:32 Uhr
Zitat von ZTommy:

und hier auch nochmal ein Hallo und danke Dir

sehr schön...

Auch hier nochmal ein paar Eckdaten:

1. das Verzeichnis bleibt immer gleich
2. es sind eventuell auch nur bestimmte TXT-Dateien, die benötigt werden (von 20 nur 15 Dateien)
diese muss ich dann einzeln aufführen
3. es gibt keine Unterverzeichnisse, selbst wenn, ist dies unrelevant

mal ein Beispiel, wie die TXT-Datei vom Inhalt her aussehen muss:


Im Ordner Baum gibt es folgende TXT-Dateien:
grün.txt
blau.txt
rot.txt
gelb.txt usw....

in der erstellten TXT muss es nun so aussehen:

Name der eingepflegten TXT:

grün.txt (als Überschrift / Marker)
Text / Inhalt der grün.TXT
Text
Text
Text..........

blau.txt
Text
Text
Text
Text...........

rot.txt
Text
Text
Text
Text..........

Das muss dann alles in einer bzw. der zusammengeführten TXT stehen.

01.
# Ordner in dem die Dateien liegen
02.
$ordner = 'D:\DeinOrdner '
03.
# nur die Dateien auflisten die gewünscht sind
04.
$dateinamen = 'datei1.txt','datei2.txt','datei3.txt'
05.
# Ausgabedatei 
06.
$ausgabe = 'D:\DeinOrdner\ergebnis.txt'
07.
# Action  ...
08.
Get-ChildItem "$ordner\*" -File -Include $dateinamen | %{$_.Name,(Get-Content $_.FullName)} | Set-Content $ausgabe
Nicht vergessen:
https://administrator.de/faq/32
Bitte warten ..
Mitglied: ZTommy
11.11.2019 um 15:12 Uhr
Hallöchen Erik ,

danke für deine Nachricht

der Fehler lag einerseits an: "scriptname.ps1 -quellpfad c:\daten\baum -zieldatei \\server\zentraleAblage\baum.txt"
da fehlte dann das Verzeichnis noch.
"C:\Pfad\scriptname.ps1" -quellpfad "c:\daten...."
Was aber nicht schlimm ist, da ich selbst auch den Fehler hatte, dass ich den falschen Namen der *.ps1 angegeben hatte.
Dadurch wahr es natürlich nicht möglich, das es funktioniert.
Ich hatte mich so auf die Schreibweise konzentriert, das ich den Namen garnicht beachtet hatte

Sorry, das ich jetzt erst schreibe.
Am WE keine Zeit gehabt und heute Vormittag habe ich rumgetestet, woran der Fehler liegt.
Wollte natürlich auch selbst was hinbekommen....,auch wenn es im Verhältnis zu Euch wenig ist...

Grüße
Bitte warten ..
Mitglied: ZTommy
11.11.2019 um 15:13 Uhr
Achso Erik,

es hat soweit dann wunderbar geklappt

Grüße
Bitte warten ..
Mitglied: ZTommy
11.11.2019 um 15:14 Uhr
Hallo Calendar ,

auch Dir einen Dank für den bzw. die Tipps

Auch deine variante klappt wunderbar

Getestet und läuft.

Grüße
Bitte warten ..
Mitglied: ZTommy
11.11.2019 um 15:27 Uhr
Eine Frage habe ich aber noch, bevor ich meine Frage als gelöst markiere


Wie ganz oben erwähnt, hab ich ca. 20 Verzeichnisse.

Ich kann natürlich Eure beiden Lösungen für 20 Verzeichnisse machen.

Aber, kann ich das nicht so machen, das die Abfrage über die 20 Verzeichnisse geht und dann getrennt voneinander 20 Ergebnis.txt erstellt?

Die Verzeichnisnamen bleiben fest und die gewünschten TXT-Dateien bleiben auch vom Namen fest.
Da ändert sich nichts. Was max. passieren kann ist, das ein weiteres Verzeichnis hinzukommen kann.
Das es dann halt 21 sind.

Also kurz und kanpp, 20 Verzeichnisse durchgehen und den Ihnhalt von jedem Verzeichnis für sich in eine Ergebnis.txt einpflegen und erstellen und diese erstellten Dateien in ein bestimmtest Verzeichnis ablegen.
Die *Ergebnis.txt* kann natürlich so heißen, wie das Verzeichnis selbst.
z.B.: baum.txt, Grün.txt, Rot.txt usw....

Wenn machbar natürlich!!!

Grüße
Bitte warten ..
Mitglied: calendar
11.11.2019 um 15:27 Uhr
Na dann
Zitat von calendar:
Nicht vergessen:
https://administrator.de/faq/32
Bitte warten ..
Mitglied: calendar
11.11.2019, aktualisiert um 15:37 Uhr
01.
# RootOrdner in dem die Unterordner liegen
02.
$ordner = 'D:\DeinOrdner'
03.
# nur die Dateien auflisten die gewünscht sind
04.
$dateinamen = 'datei1.txt','datei2.txt','datei3.txt'
05.
# Action  ...
06.
$ausgabeordner = 'D:\Ausgabe'
07.
Get-ChildItem $ordner -Directory -PipelineVariable folder | %{
08.
    Get-ChildItem "$($folder.Fullname)\*" -File -Include $dateinamen | %{$_.Name,(Get-Content $_.FullName)} | Set-Content "$ausgabeordner\$($folder.Name).txt"
09.
}
Bitte warten ..
Mitglied: ZTommy
11.11.2019 um 15:47 Uhr
Hallo Calendar

das ging fix.... o_O

Frage:

in dem Root-Ordner liegen in der Folgeebene ca. 150 Ordner, wo ich nur 20 brauche.

Kann ich das dann so schreiben:

$ordner = 'D:\DeinOrdner\grün\','D:\DeinOrdner\rot\','D:\DeinOrdner\blau\' usw...?

Grüße
Bitte warten ..
Mitglied: calendar
11.11.2019, aktualisiert um 15:51 Uhr
Oben bei Zeile 7 kannst du mit -Include einschränken genau so wie oben in Zeile 8

Sieht dann so aus
01.
# RootOrdner in dem die Unterordner liegen
02.
$ordner = 'D:\DeinOrdner'
03.
# Unterordner
04.
$unterordner = 'Ordner1','Ordner2','Ordner3'
05.
# nur die Dateien auflisten die gewünscht sind
06.
$dateinamen = 'datei1.txt','datei2.txt','datei3.txt'
07.
# Ausgabeordner
08.
$ausgabeordner = 'D:\Ausgabe'
09.
Get-ChildItem "$ordner\*" -Include $unterordner -Directory -PipelineVariable folder | %{
10.
    Get-ChildItem "$($folder.Fullname)\*" -File -Include $dateinamen | %{$_.Name,(Get-Content $_.FullName)} | Set-Content "$ausgabeordner\$($folder.Name).txt"
11.
}
Bitte warten ..
Mitglied: ZTommy
11.11.2019 um 15:55 Uhr
Danke Dir

ich werde das Testen

Grüße
Bitte warten ..
Mitglied: erikro
11.11.2019 um 16:24 Uhr
Moin,

schön, dass es geklappt hat.

Zitat von ZTommy:

Eine Frage habe ich aber noch, bevor ich meine Frage als gelöst markiere


Wie ganz oben erwähnt, hab ich ca. 20 Verzeichnisse.

Ich kann natürlich Eure beiden Lösungen für 20 Verzeichnisse machen.

Aber, kann ich das nicht so machen, das die Abfrage über die 20 Verzeichnisse geht und dann getrennt voneinander 20 Ergebnis.txt erstellt?

Klar geht das:

01.
PARAM (
02.

03.
    $inputcsv
04.

05.
)
06.

07.

08.
function get-filenames {
09.
   PARAM (
10.
      $quellpfad,
11.
      $zieldatei
12.
   )
13.

14.
   $files = get-childitem $quellpfad\*.txt
15.

16.
   foreach($file in $files) {
17.
  
18.
       $content = get-content $file
19.
       out-file -inputObject $file.fullname -filepath $zieldatei -append
20.
       out-file -inputObject $content -filepath $zieldatei -append
21.
       $content = ""
22.
   }
23.
}
24.

25.
$directory-list = import-csv $inputcsv -delimiter ";"
26.
foreach($dir in $directory-list) {
27.

28.
    get-filenames $dir.quelle $dir.ziel
29.

30.
}
Dann schreibst Du in Deine input.csv:

01.
quelle;ziel
02.
quellpfad1;zieldatei1
03.
quellpfad2;zieldatei2
04.
...
hth

Erik
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch : TXT-Datei auslesen
gelöst Frage von Newplay123Batch & Shell20 Kommentare

Hallo, ich habe eine Textdatei mit dem Inhalt " "Test" ". Also die zweiten Anführungszeichen sind auch mit in ...

Batch & Shell

Inhalt einer txt Datei pro Zeile in je neue txt Datei

gelöst Frage von sanshineBatch & Shell4 Kommentare

Servus, ich habe mehrer txt Dateien. In ihnen stehen manchmal 1 Zeile, manchmal 20 Zeilen. Ich möchte, dass ein ...

Batch & Shell

Merkwürdige Zeilenformatierung in txt Datei

gelöst Frage von miczarBatch & Shell3 Kommentare

Hallo zusammen, ich arbeite mit .cxv Dateien. Das ist nichts anderes wie .txt Dateien nur mit Programmspezifischer Endung. Pro ...

Windows 7

Txt Datei mit findstr durchsuchen

gelöst Frage von 126594Windows 72 Kommentare

Hallo zusammen! Leider komme ich gerade an meine Grenzen und weiß nicht mehr weiter, jetzt hoffe ich hier, den ...

Neue Wissensbeiträge
Verschlüsselung & Zertifikate

Extended Validation Certificates are (Really, Really) Dead

Information von Dani vor 21 StundenVerschlüsselung & Zertifikate

Moin all, sehr interessanter Artikel zu EV SSL/TLS- Zertifikate von Troy Hunt: Gruß, Dani

Humor (lol)
Das IoT wird schlimmer
Erfahrungsbericht von Henere vor 3 TagenHumor (lol)8 Kommentare

Nun auch schon über den WSUS:

Sicherheit

Win10 1809 und höher erlauben nun das Sperren und Whitelisten von bestimmten Geräten

Tipp von DerWoWusste vor 3 TagenSicherheit1 Kommentar

Vor 1809 konnten nur Geräteklassen gesperrt werden, nun können endlich einzelne Device instance IDs gewhitelistet werden (oder andersherum: gesperrt ...

Windows 10

Hands-On: What is new in the Windows 10 November 2019 Update?

Information von DerWoWusste vor 4 TagenWindows 10

Die wenigen (aber zum Teil interessanten) Neuheiten werden in diesem Video sehr schnell erklärt und vorgeführt.

Heiß diskutierte Inhalte
Mac OS X
Mac Startfehler: Too many corpses created
Frage von winlinMac OS X24 Kommentare

Seit meinem letzten update komme ich nach der Anmeldung nixht mehr weiter. Der Fortschrittsbalken nach der Anmeldung geht bis ...

Server
Suche günstigen Server für erste Schritte mit Microsoft Windows Server 2016 + Exchange
gelöst Frage von vodaviServer19 Kommentare

Hallo zusammen, ich bin auf der Suche nach einem preiswerten, aber guten Server. Mir geht es darum, dass ich ...

Schulung & Training
Was sollte man im Helpdesk bzw Service Desk 1st Level wissen
Frage von loubertSchulung & Training14 Kommentare

Hallo zusammen, ich fange demnächst in einem IT-Systemhaus meinen neuen Job im IT-Helpdesk (UHD), 1st Level (für externe Kunden,) ...

Windows XP
Zugriff auf WindowsXP-Freigabe nur per Eingabeaufforderung möglich
Frage von FA-jkaWindows XP11 Kommentare

Hallo, ich installiere gerade in einer VM WindowsXP; um dort eine "antike" Anwendung zu betreiben. Mit dieser werden historische ...