Alle Dateien eines Ordners zusammenkopieren - nach Auswahlkriterien
Hallo Gemeinde,
mir liegt ein VB-Script vor, daß ALLE Textdateien des aktuellen Ordners in eine einzige Datei kopiert (JOIN, MERGE, COMBINE, CONCATENATE). Ich nöchte aber nur bestimmte Dateitypen verarbeiten. Leider kommt beim Aufruf ein Fehler. Wie kann man das beseitigen?
Egal ob ich in Zeile 12 verwende es kommt immer ein Fehler
Danke im voraus für die Hilfe
Micha
mir liegt ein VB-Script vor, daß ALLE Textdateien des aktuellen Ordners in eine einzige Datei kopiert (JOIN, MERGE, COMBINE, CONCATENATE). Ich nöchte aber nur bestimmte Dateitypen verarbeiten. Leider kommt beim Aufruf ein Fehler. Wie kann man das beseitigen?
Dim fso, folder, files, NewsFile,sFolder, objTextFile
Const ForReading = 1
Set fso = CreateObject("Scripting.FileSystemObject")
Set objOutputFile = fso.CreateTextFile("Merged.txt")
currentPath = ".\"
sFolder= currentPath
Set files = fso.GetFolder(sFolder).Files
MSgBox files.Count
For each folderIdx In files
if lcase(objFSO.getExtensionName(files.path))="wb2" then ' Fehler 1A8 / 1B6
Set objTextFile = fso.OpenTextFile(folderIdx.path, ForReading) '.name statt .path
strText = objTextFile.ReadAll
objTextFile.Close
objOutputFile.WriteLine strText
End if
Next
objOutputFile.Close
...getExtensionName(file ODER files
Danke im voraus für die Hilfe
Micha
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 192348
Url: https://administrator.de/forum/alle-dateien-eines-ordners-zusammenkopieren-nach-auswahlkriterien-192348.html
Ausgedruckt am: 06.01.2025 um 23:01 Uhr
6 Kommentare
Neuester Kommentar
Hallo Gurkenhobel!
Etwas gestrafft (aber nicht getestet) etwa so:
Beim Zusammenkopieren von Code-Schnipseln immer darauf achten, dass Objekte gleich benannt sind (im konkreten Fall "objFSO" vs "fso") - das wäre Dir übrigens eher aufgefallen, wenn du "
Falls Du übrigens noch Wert auf die Ausgabe der Anzahl an "wb2"-Files legst, musst du diese per Zähler innerhalb der Schleife ermitteln ...
Grüße
bastla
P.S.: Als Batch wäre das übrigens genau eine Zeile:
Etwas gestrafft (aber nicht getestet) etwa so:
Dim fso, file, files, sFolder, objOutputFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set objOutputFile = fso.CreateTextFile("Merged.txt")
sFolder = ".\"
Set files = fso.GetFolder(sFolder).Files
For Each file In files
If LCase(fso.GetExtensionName(file.Name)) = "wb2" Then
objOutputFile.WriteLine fso.OpenTextFile(file.Path).ReadAll
End if
Next
objOutputFile.Close
Option Explicit
" verwendet hättest (ansonsten wären die Deklarationen per "Dim
" hier auch entbehrlich) ...Falls Du übrigens noch Wert auf die Ausgabe der Anzahl an "wb2"-Files legst, musst du diese per Zähler innerhalb der Schleife ermitteln ...
Grüße
bastla
P.S.: Als Batch wäre das übrigens genau eine Zeile:
type *.wb2>Merged.txt
Hallo Gurkenhobel,
files ist eine Aufzählung, die alle Dateien im spezifizierten Verzeichnis repräsentiert. Somit hat files natürlich keine Eigenschaft path.
Du iterierst aber über files und ordnest der Variablen folderIdx jeweils ein Dateiobjekt zu (auch wenn der von dir gewählte Name etwas irreführend ist).
Somit solltest du mal mit
Gut gemeinter Rat:
Du solltest zumindest versuchen zu verstehen, was du so zusammen kopierst.
Grüße
rubberman
[Edit Hallo bastla /]
files ist eine Aufzählung, die alle Dateien im spezifizierten Verzeichnis repräsentiert. Somit hat files natürlich keine Eigenschaft path.
Du iterierst aber über files und ordnest der Variablen folderIdx jeweils ein Dateiobjekt zu (auch wenn der von dir gewählte Name etwas irreführend ist).
Somit solltest du mal mit
fso.getExtensionName(folderIdx.Path)
testen (objFSO hast du nämlich auch nirgends definiert ).Gut gemeinter Rat:
Du solltest zumindest versuchen zu verstehen, was du so zusammen kopierst.
Grüße
rubberman
[Edit Hallo bastla /]
moin,
ergänzend dazu (weil schon etwas Batch mit ist) noch das Anzeigen von .txt Dateien, welche kein Abschliesendes LF haben:
Um keine zusätzliche Leerzeile bei den Dateien mit abschliessendem LF zu erzeugen benutzt man Find:
Wenn es etwas Performanter sein soll mit einer Pipe:
More statt type gibt gleich das fehlende LF dazu, sollte aber gepiped oder in ein Datei umgeleitet werden.
Eine Pipe zu more erzeugt eine Zusätzliche Zeile (wie Echo().
Gruß Phil
ergänzend dazu (weil schon etwas Batch mit ist) noch das Anzeigen von .txt Dateien, welche kein Abschliesendes LF haben:
findstr /m /v $ *.txt
(for %i in (*.txt) do @find /v "" <"%~i")>merged.txt
(for %i in (*.txt) do @type "%~i" |findstr .)>merged.txt
Eine Pipe zu more erzeugt eine Zusätzliche Zeile (wie Echo().
Gruß Phil