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, 2220 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
Off Topic

"Ich habe nichts zu verbergen"

(2)

Erfahrungsbericht von FA-jka zum Thema Off Topic ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch : alle Dateien eines Ordners bearbeiten (1)

Frage von deguonkel zum Thema Batch & Shell ...

Windows XP
WordPad zeigt beim Öffnen keine RTF-Dateien mehr an (1)

Frage von Sinzal zum Thema Windows XP ...

Windows Server
Dateien erscheinen nicht (2)

Frage von kellbidden zum Thema Windows Server ...

Heiß diskutierte Inhalte
CPU, RAM, Mainboards
Kaufberatung für mind. 8 verschiedene HighEnd-Mainboards (22)

Frage von yperiu zum Thema CPU, RAM, Mainboards ...

Mac OS X
Mac kann nicht im LAN pingen alle anderen schon (19)

Frage von smartino zum Thema Mac OS X ...

Hardware
gelöst PCI-Express-Adapterfrage (14)

Frage von DerWoWusste zum Thema Hardware ...

Linux Netzwerk
DHCP IP-vergabe erst nach 1-2 Minuten (11)

Frage von Maik82 zum Thema Linux Netzwerk ...