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

Frage Entwicklung VB for Applications

GELÖST

Dateisuche in Ordner mit 50.000 Dateien zu langsam

Mitglied: woswasih

woswasih (Level 1) - Jetzt verbinden

26.05.2014, aktualisiert 11:39 Uhr, 1345 Aufrufe, 9 Kommentare

Zuerstmal ein Hallo an alle und schöne grüße aus Oberösterreich!

Ich habe folgendes Problem, ich erstelle per Script ein E-Mail und hänge dem E-Mail 1-3 Dateien von einem Netzwerkorder an, in diesem Ordner befinden sich (dzt. ca. 50.000 Dateien).
An das Script werden 2 Variablen übergeben, (1) die Empfänger E-Mail Adresse, und (2) die ersten 12 Zeichen des Dateinamens, die restlichen Zeichen des Dateinamnens (Zeitstempel) sind mir zu dem Zeitpunkt leider nicht bekannt, was jedoch grundsätzlich kein Problem sein sollte da ja alle 1-3 Dateien mit den gleichen 12 Zeichen beginnen und ich alle 1-3 Dateien anhängen möchte.

Im Test mit in etwa 20 Dateien im Ordner funktioniert das recht flott... Jeodch nun im Echtbetrieb, ist es einfach nicht möglich das so zu handeln.
Leider habe ich bisher nichts gefunden um das sinnvoll zu erledigen.

Hier das Script:
01.
  
02.
Const olByValue = 1 
03.
Const olMailItem = 0 
04.
  
05.
Dim oOApp 
06.
Dim oOMail 
07.
Dim oFolder 
08.
Dim oFile 
09.
Dim ixb 
10.
Dim bericht(2) 
11.
  
12.
Set args = Wscript.Arguments 
13.
 
14.
Set oFSO = CreateObject("Scripting.FileSystemObject")   
15.
set oFolder = oFSO.GetFolder ("C:\txt") 
16.
Set oOApp = CreateObject("Outlook.Application") 
17.
Set oOMail = oOApp.CreateItem(olMailItem) 
18.
  
19.
ixb = 0 
20.
 
21.
 With oOMail 
22.
     
23.
	.GetInspector.Display 
24.
     olOldBody = .htmlBody 
25.
	 
26.
	.To = WScript.Arguments.Item(0) 
27.
    .Subject = "Betreff" 
28.
	.htmlBody = "<font size='3,9' face='Calibri (Texkörper)' color='#151B54'>In der Anlage finden Sie die Berichte" & olOldBody 
29.
	 
30.
	For Each oFile In oFolder.Files 
31.
		If left(oFile.Name,12) = WScript.Arguments.Item(1) Then 
32.
			If right(oFile.Name,3) = "pdf" Then 
33.
				If ixb < 2 Then 
34.
					bericht(ixb) = oFile.Name 
35.
					.Attachments.Add ofolder & "\" & bericht(ixb), olByValue, 1 
36.
					ixb = ixb + 1 
37.
				End If				 
38.
			End If 
39.
		End If 
40.
	Next 
41.
	 
42.
	.Display 
43.
End With


Hoffe Ihr habt vielleicht einen Tipp für mich!
Lg Chris







Mitglied: Xaero1982
26.05.2014 um 11:51 Uhr
Moin,

ja zwei Tipps:

Dateien splitten - sorry, aber 50.000 Dateien in einem Ordner sind zu viel für Windows
oder
evtl. kommt Linux besser damit klar.

Gruß
Bitte warten ..
Mitglied: woswasih
26.05.2014 um 11:59 Uhr
Grüß Dich,
danke, aber leider komme ich mit dem nicht wirklich weiter da ich die Dateien nicht auf mehrere Ordner aufteilen kann... Das System darüber kann damit nicht umgehen...

Das einzige was mit Aufällt, ein kopieren zB: mit "Erste12Zeichen*.pdf" geht eigentlich sehr schnell.
Also evtl. in neuen Ordner kopieren, von dort aus in Mail und anschlißend wieder löschen...

Aber ich vieleicht hat ja noch wer eine bessere Lösung?

LG
Bitte warten ..
Mitglied: colinardo
LÖSUNG 26.05.2014, aktualisiert um 13:48 Uhr
Servus Chris,
könntest du über einen Umweg so machen:
01.
Set objShell = CreateObject("Wscript.Shell") 
02.
Set oExec = objShell.Exec("cmd /c dir /B /S /A-D ""c:\txt\" & WScript.Arguments.Item(1) & "*.pdf"" 2>nul") 
03.
Do While oExec.Status = 0 
04.
     WScript.Sleep 100 
05.
Loop 
06.
files = Split(oExec.StdOut.ReadAll(),vbNewLine,-1,1) 
07.
 
08.
For i = 0 To UBound(files) 
09.
	If Trim(files(i)) <> "" Then 
10.
		MsgBox files(i) 
11.
                'mach was mit dem file ... 
12.
	End If 
13.
Next
Alternativ könnte man sich ein COM-Objekt (dll) in Visual-Studio bauen das die .NET-Funktionen dazu nutzt und dann ins Script mit CreateObject einbinden, ansonsten lässt sich das ganze auch problemlos und schnell mit Powershell machen.

Grüße Uwe
Bitte warten ..
Mitglied: Snowman25
26.05.2014, aktualisiert um 12:05 Uhr
Hallo woswasih,
For Each oFile In oFolder.Files
If left(oFile.Name,12) = WScript.Arguments.Item(1) Then
String-Operationen über 50k Files
If right(oFile.Name,3) = "pdf" Then
String-Operationen über eine Sub-Menge der 50k Files
If ixb < 2 Then
bericht(ixb) = oFile.Name
.Attachments.Add ofolder & "\" & bericht(ixb), olByValue, 1
Datei-Operation, welche das Einlesen und Verarbeiten der Datei benötigt.
Wird aber nur 3 mal ausgeführt?

Das braucht alles Zeit.
Gibt es vielleicht eine oFile.Filetype-Variable, die du Vergleichen kannst?

Insgesamt geht es wohl schneller, wenn du dir ein Directory-Listing nimmst. Als batch-befehl in etwa:
{{"dir /B /A-D" & Wscript.Arguments.Item(1) & "*.pdf"}}
Dann hast du eine Zeilenumbruch-getrennte Liste aller Dateien, die du brauchst. Und dann bearbeitest du nur die ersten 3 davon.

Gruß,
Snowman25
Bitte warten ..
Mitglied: Xaero1982
26.05.2014 um 12:05 Uhr
Verstehe ich nicht ganz. Also das rauskopieren einer Datei aus dem Ordner mit den 50.000 Dateien in einen anderen Ordner geht schnell, aber das Versenden widerum nicht?
Bitte warten ..
Mitglied: woswasih
26.05.2014, aktualisiert um 12:48 Uhr
Hi Uwe, ich versuche mal deinen Lösungsansatz, nur scheint es als sei ich mit meinen Anfängerkenntnissen zu doof, das korrekt bei mir einzubauen!?

01.
Const olByValue = 1 
02.
Const olMailItem = 0 
03.
  
04.
Dim oOApp 
05.
Dim oOMail 
06.
Dim oFolder 
07.
Dim oFile 
08.
  
09.
Set args = Wscript.Arguments 
10.
 
11.
Set oFSO = CreateObject("Scripting.FileSystemObject")   
12.
set oFolder = oFSO.GetFolder ("C:\txt") 
13.
Set oOApp = CreateObject("Outlook.Application") 
14.
Set oOMail = oOApp.CreateItem(olMailItem) 
15.
Set objShell = CreateObject("Wscript.Shell")  
16.
Set oExec = objShell.Exec("cmd /c dir /B /S /A-D ""c:\txt\" & "WTG024912014" & "*.pdf"" 2>nul")  
17.
	 
18.
 With oOMail 
19.
     
20.
	.GetInspector.Display 
21.
     olOldBody = .htmlBody 
22.
	 
23.
	.To = "text@test.at" 
24.
    .Subject = "Betreff" 
25.
	.htmlBody = "<font size='3,9' face='Calibri (Texkörper)' color='#151B54'>In der Anlage finden Sie die Berichte" & olOldBody 
26.
 
27.
	Do While oExec.Status = 0  
28.
		WScript.Sleep 100  
29.
	Loop  
30.
 
31.
	files = Split(oExec.StdOut.ReadAll(),vbNewLine,-1,1)  
32.
 
33.
	For i = 0 To UBound(files)  
34.
		If Trim(files(i)) <> "" Then  
35.
			.Attachments.Add ofolder & "\" & files(i), olByValue, 1 
36.
		End If  
37.
	Next 
38.
	 
39.
	.Display 
40.
End With
Bitte warten ..
Mitglied: colinardo
26.05.2014, aktualisiert um 12:57 Uhr
setze die While-Schleife und den Split-Part in Zeile 17 ein, und das oFolder ist doppelt für den Pfad...

01.
Const olByValue = 1 
02.
Const olMailItem = 0 
03.
  
04.
Dim oOApp 
05.
Dim oOMail 
06.
Dim oFolder 
07.
Dim oFile 
08.
  
09.
Set args = Wscript.Arguments 
10.
 
11.
Set oFSO = CreateObject("Scripting.FileSystemObject")   
12.
oFolder = "C:\txt" 
13.
Set oOApp = CreateObject("Outlook.Application") 
14.
Set oOMail = oOApp.CreateItem(olMailItem) 
15.
Set objShell = CreateObject("Wscript.Shell")  
16.
Set oExec = objShell.Exec("cmd /c dir /B /A-D """ & oFolder & "\WTG024912014" & "*.pdf"" 2>nul")  
17.
Do While oExec.Status = 0  
18.
   WScript.Sleep 100  
19.
Loop  
20.
files = Split(oExec.StdOut.ReadAll(),vbNewLine,-1,1)  
21.
 
22.
With oOMail 
23.
     
24.
	.GetInspector.Display 
25.
        olOldBody = .htmlBody 
26.
	.To = "text@test.at" 
27.
        .Subject = "Betreff" 
28.
	.htmlBody = "<font size='3,9' face='Calibri (Texkörper)' color='#151B54'>In der Anlage finden Sie die Berichte" & olOldBody 
29.
 
30.
	For i = 0 To UBound(files)  
31.
		If Trim(files(i)) <> "" Then  
32.
			.Attachments.Add oFolder & "\" & files(i), olByValue, 1 
33.
		End If  
34.
	Next 
35.
	 
36.
	.Display 
37.
End With
Bitte warten ..
Mitglied: woswasih
26.05.2014, aktualisiert um 13:05 Uhr
Hallo, Irgendwo hats mich noch...
Bekomme dan Fehler das Der Datei- pder ORdnermane ungültig ist!? (c:\txt\new.vbs, was das script eigentlich selbst wäre)

01.
Const olByValue = 1 
02.
Const olMailItem = 0 
03.
  
04.
Dim oOApp 
05.
Dim oOMail 
06.
Dim oFolder 
07.
Dim oFile 
08.
  
09.
Set args = Wscript.Arguments 
10.
 
11.
Set oFSO = CreateObject("Scripting.FileSystemObject")   
12.
oFolder = "C:\txt" 
13.
Set oOApp = CreateObject("Outlook.Application") 
14.
Set oOMail = oOApp.CreateItem(olMailItem) 
15.
Set objShell = CreateObject("Wscript.Shell")  
16.
Set oExec = objShell.Exec("cmd /c dir /B /S /A-D """ & oFolder & "\WTG024912014" & "*.pdf"" 2>nul")  
17.
Do While oExec.Status = 0  
18.
		WScript.Sleep 100  
19.
Loop  
20.
files = Split(oExec.StdOut.ReadAll(),vbNewLine,-1,1)  
21.
 
22.
 With oOMail 
23.
 	.GetInspector.Display 
24.
     olOldBody = .htmlBody 
25.
	.To = "text@test.at" 
26.
    .Subject = "Betreff" 
27.
	.htmlBody = "<font size='3,9' face='Calibri (Texkörper)' color='#151B54'>In der Anlage finden Sie die Berichte" & olOldBody 
28.
	 
29.
	For i = 0 To UBound(files)  
30.
		If Trim(files(i)) <> "" Then  
31.
			.Attachments.Add oFolder & "\" & files(i), olByValue, 1 
32.
		End If  
33.
	Next 
34.
	 
35.
	.Display 
36.
End With
lg
Bitte warten ..
Mitglied: woswasih
26.05.2014, aktualisiert um 13:29 Uhr
Herzlichen Dank!
Die Lösung funktioniert Perfekt!!

Jetzt sinds nur mehr 2 Kleingkeiten:
1) Schriftgröße 11 zu definieren schaff ich nicht...
2) das Outlook nicht jammert wenn ich ihm was übergebe...

Danke nochmals!
Bitte warten ..
Ähnliche Inhalte
Windows Server
Windows Datei-Explorer nach Ordner-Umzug sehr langsam
gelöst Frage von xXEddiXxWindows Server2 Kommentare

Hallo, erstmal ein gesundes neues Jahr an alle! Ich habe folgendes Problem, wir haben im zum Jahreswechsel eine neue ...

Windows Server
Kopieren von Dateien in umgeleiteten Ordner langsam (Ordnerumleitung)
gelöst Frage von PatrickFWindows Server4 Kommentare

Hallo, ich habe hier einen Windows Server 2012 R2 Standard mit installierter Essentails Rolle. Daran hängen noch ein paar ...

Batch & Shell
PowerShell Script für Dateisuche
gelöst Frage von Stefan007Batch & Shell4 Kommentare

Hi Leute, ich suche ein Script welches für die Suche nach einer Datei zuständig sein soll. Meine Vorstellung: Es ...

Windows Server
Professionelle Dateisuche mit Datenbank gesucht
Frage von cobain86Windows Server5 Kommentare

Hallo ich bin auf der suche nach einem Professionellen Suchsystem für Windows Dateiserver. Vorzugsweise mit Datenbank hinten dran. Grund ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 1 TagTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 1 TagSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 1 TagSicherheit9 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Sicherheit
Meltdown und Spectre: Die machen uns alle was vor
Information von FrankSicherheit29 Kommentare

Aktuell sieht es in den Medien so aus, als hätten die Hersteller wie Intel, Microsoft und Co den aktuellen ...

Ubuntu
Ubuntu - Starter für nicht vertrauenswürdige Anwendungen
Frage von adm2015Ubuntu17 Kommentare

Hallo zusammen, Ich verwende derzeit die Ubuntu Versionen 17.10 bzw. im Test 18.04. Ich habe mehrere .desktop Dateien in ...

SAN, NAS, DAS
Hilfe beim Einrichten eines Storages (SAN)
gelöst Frage von Vader666SAN, NAS, DAS15 Kommentare

Hallo Admins! Ich bin in einer kleineren Firma und hatte bisher mit dem Thema SAN nur in meiner Ausbildung ...

Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...