Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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
GELÖST

Alle Dateien eines Ordners zusammenkopieren - nach Auswahlkriterien

Frage Entwicklung VB for Applications

Mitglied: Gurkenhobel

Gurkenhobel (Level 1) - Jetzt verbinden

07.10.2012, aktualisiert 14:55 Uhr, 2208 Aufrufe, 6 Kommentare

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?

01.
Dim fso, folder, files, NewsFile,sFolder, objTextFile 
02.
Const ForReading = 1 
03.
 
04.
Set fso = CreateObject("Scripting.FileSystemObject") 
05.
Set objOutputFile = fso.CreateTextFile("Merged.txt") 
06.
currentPath = ".\" 
07.
sFolder= currentPath 
08.
 
09.
Set files = fso.GetFolder(sFolder).Files 
10.
MSgBox files.Count 
11.
For each folderIdx In files     
12.
 if lcase(objFSO.getExtensionName(files.path))="wb2" then  ' Fehler 1A8 / 1B6 
13.
  Set objTextFile = fso.OpenTextFile(folderIdx.path, ForReading) '.name statt .path 
14.
  strText = objTextFile.ReadAll 
15.
  objTextFile.Close 
16.
  objOutputFile.WriteLine strText 
17.
 End if 
18.
Next   
19.
objOutputFile.Close
Egal ob ich in Zeile 12
...getExtensionName(file ODER files
verwende es kommt immer ein Fehler

Danke im voraus für die Hilfe

Micha
Mitglied: bastla
07.10.2012, aktualisiert um 16:17 Uhr
Hallo Gurkenhobel!

Etwas gestrafft (aber nicht getestet) etwa so:
01.
Dim fso, file, files, sFolder, objOutputFile 
02.
 
03.
Set fso = CreateObject("Scripting.FileSystemObject") 
04.
Set objOutputFile = fso.CreateTextFile("Merged.txt") 
05.
sFolder = ".\" 
06.
 
07.
Set files = fso.GetFolder(sFolder).Files 
08.
For Each file In files     
09.
    If LCase(fso.GetExtensionName(file.Name)) = "wb2" Then 
10.
        objOutputFile.WriteLine fso.OpenTextFile(file.Path).ReadAll 
11.
     End if 
12.
Next   
13.
objOutputFile.Close
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 "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
Bitte warten ..
Mitglied: rubberman
07.10.2012, aktualisiert um 16:11 Uhr
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 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 /]
Bitte warten ..
Mitglied: Gurkenhobel
07.10.2012, aktualisiert um 17:37 Uhr
Hallo Ihre zwei beiden

und danke für die Aufklärung. Ich tue mir manchmal sehr schwer, wenn ich gefunde Scripte anpasse.

Den Batch mit
type *.wb2 > Merged.txt
hatte ich auch schon probiert. Aber irgendwie haben die wb2-Dateien kein abschließendes Zeilenende CR so daß dann alles in eine (schlecht auswertbare) Zeile kopiert wird.

mit
if lcase(fso.getExtensionName(folderIdx.Path))="wb2" Then
klappt es natürlich auch...

Einen schönen (Rest-)Sonntag wünscht Euch der Gurkenhobel
Bitte warten ..
Mitglied: bastla
07.10.2012, aktualisiert um 17:43 Uhr
Hallo Gurkenhobel!
irgendwie haben die wb2-Dateien kein abschließendes Zeilenende CR so daß dann alles in eine (schlecht auswertbare) Zeile kopiert wird.
Vermutlich fehlt eher LF - anyhow, sollte etwa so gehen:
for %%i in (*.wb2) do (type "%%i" & echo\)>>Merged.txt
Grüße
bastla
Bitte warten ..
Mitglied: Gurkenhobel
07.10.2012 um 19:12 Uhr
Ja danke Bastla,

AUCH DAS funktioniert ganz toll.
Grüße

Gurkenhobel
Bitte warten ..
Mitglied: pieh-ejdsch
07.10.2012, aktualisiert um 22:22 Uhr
moin,

ergänzend dazu (weil schon etwas Batch mit ist) noch das Anzeigen von .txt Dateien, welche kein Abschliesendes LF haben:
findstr /m /v $ *.txt
Um keine zusätzliche Leerzeile bei den Dateien mit abschliessendem LF zu erzeugen benutzt man Find:
(for %i in (*.txt) do @find /v "" <"%~i")>merged.txt
Wenn es etwas Performanter sein soll mit einer Pipe:
(for %i in (*.txt) do @type "%~i" |findstr .)>merged.txt
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Dateien eines Ordners mit find welche 1234 im Namen haben umbenennen in x12345 (4)

Frage von reissaus73 zum Thema Batch & Shell ...

Batch & Shell
gelöst Dateien mit vorgegebener Größe erstellbar? (3)

Frage von Stefan007 zum Thema Batch & Shell ...

Windows 7
Kopierte Dateien im Hintergrund anzeigen (1)

Frage von MichiBLNN zum Thema Windows 7 ...

Festplatten, SSD, Raid
Reallocated sectors count: Welche Dateien befinden sich in den beschädigten Sektoren? (9)

Frage von DunkleMaterie zum Thema Festplatten, SSD, Raid ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...