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

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, 1369 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
Humor (lol)
IoT-Gefahr: Smartes Aquarium leckt!
Information von Lochkartenstanzer vor 1 TagHumor (lol)3 Kommentare

Moin, Die IoT-Manie hat weitere Opfer gefunden. Ein Casino-Leck durch ein smartes Aquarium: Allerdings haben sie kein Wasser, sondern ...

Router & Routing

Alte Fritzbox 7270 mit VPN und SIP-Telefonie hinter O2 Homebox 6641 als "Modem"

Erfahrungsbericht von the-buccaneer vor 1 TagRouter & Routing3 Kommentare

Nun war es soweit: Auch O2 hat mich mit VOIP zwangsbeglückt. Heute am Privatanschluss, in 2 Wochen ist das ...

Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 2 TagenSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 2 TagenWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Heiß diskutierte Inhalte
Router & Routing
Mikrotik: Routing zwischen Interfaces mit Geräten ohne Gateway
Frage von TonLichtVideoRouter & Routing18 Kommentare

Hallo zusammen, ich komme aus dem Veranstaltungstechnik Bereich und habe zwei Netze um verschiedene Hardware zu Remoten. CONTROL1 192.168.1.0/24 ...

Linux Netzwerk
Raspberry Pi 3: WLAN Power save deaktivieren
Frage von nordie92Linux Netzwerk14 Kommentare

Moin moin, mein Raspberry Pi 3 Model B benötigt eine dauerhaft aktive WLAN-Verbindung. Leider bricht die WLAN-Verbindung nach einigen ...

Vmware
Server 2008 r2 vmware terminalserver
Frage von MasterCVmware11 Kommentare

Guten Abend zusammen, ich hoffe , dass einer von euch mir weiterhelfen kann ,bei meinem kack Problem ! Ist ...

VB for Applications
VBScript mit WINscp für einfachen FTP Transfer und nachträglichem verschieben der Datei in ein erledigt Verzeichnis
Frage von KeiosIDVB for Applications9 Kommentare

Hallo, leider soll ich auf den neueren Servern(Win2016R2) keine *.Bat Dateien mehr laufen lassen. Hier soll nun alles über ...