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 mit bestimmter Dateierweiterung ein einem Verzeichnis auf Existenz prüfen

Frage Entwicklung VB for Applications

Mitglied: cbli

cbli (Level 1) - Jetzt verbinden

08.10.2007, aktualisiert 18.10.2012, 10741 Aufrufe, 13 Kommentare

Ich habe ein bereits fertiges lauffähiges Script ,daß ich nun nur noch etwas komfortabler gestalten will.
Ich wollte prüfen lassen

mit FileExists ob Dateien mit bestimmten Endungen in einem bestimmten Verzeichnis existieren (Namen sind nicht bekannt, ich will nur auf Endungen prüfen).


z.B

strOrdner = "d:\exceltemp"

in strordner könnten sich Excel Dateien mit der Endung .xls befinden. Die vollen Namen kenne ich nicht. Daher kann ich ja auch nicht mit FileExists auf ihre Existenz prüfen.
Wie prüfe ich dann nur auf Endungen ? Wildcards gehen nicht oder meine Syntax ist falsch.

Falls dies möglich ist, ist es dann auch möglich in einer schleife verschiedene Dateiendungen auf Existenz zu prüfen, also nicht nur .xls, sonder auch z.b, .doc , .txt , .mdb ,usw......
Vielleicht über ein Array ?

Vielen Dank für die Hilfe

Gruß
Claus
Mitglied: bastla
08.10.2007 um 17:03 Uhr
Hallo cbli!

Kannst Du kurz erklären, was genau Du mit dieser Prüfung vorhast bzw in welcher Form Du deren Ergebnisse benötigst?

Grüße
bastla
Bitte warten ..
Mitglied: bastla
08.10.2007 um 17:23 Uhr
... oder es einfach selbst umsetzen ...

Als Grundgerüst:
01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
strOrdner = "d:\exceltemp" 
03.
aTypen = Array("xls", "doc", "txt", "mdb") 
04.
For Each sTyp In aTypen 
05.
	bIsDa = False 
06.
	For Each oFile In fso.GetFolder(strOrdner).Files 
07.
		If LCase(fso.GetExtensionName(oFile.Path)) = sTyp Then 
08.
			bIsDa = True 
09.
			Exit For 
10.
		End If 
11.
	Next 
12.
	If bIsDa Then 
13.
		WScript.Echo "Mindestens eine " & sTyp & "-Datei ist vorhanden." 
14.
	Else 
15.
		WScript.Echo "Es ist keine " & sTyp & "-Datei vorhanden."	 
16.
	End If 
17.
Next
Grüße
bastla
Bitte warten ..
Mitglied: cbli
08.10.2007 um 17:29 Uhr
Hallo cbli!

Kannst Du kurz erklären, was genau Du
mit dieser Prüfung vorhast bzw in
welcher Form Du deren Ergebnisse
benötigst?


Wie ich schon schrieb, nur prüfen ob diese Dateien mit einer Dateiendung (z.B xls) in dem bestimmten Verzeichnis existieren und entprechend eine msgbox oder txtdatei ausgeben mit dem Resultat. Ist nicht zwingend notwendig für mein Script,es läuft auch ohne so wie es soll.
Alles nur Komfort Dinge.
Eventuell interessant wären:

1. Auf Existenz mehrerer verschiedener Dateiendungen auf einmal prüfen

2. Eine Kombination von Punkt 1 mit Abfrage der Dateigröße und damit verbundener
unterschiedlicher Weiterverarbeitung

3. Das Zählen der gefunden Dateien und Ausgabe in txdatei oder msgbox

Punkt 1 + 2 sind eher für zukünftige Scripte gedacht,aber es wäre natürlich auch jetzt schon gut zu wissen wies geht.
Punkt 3 könnte ich für mein jetztiges Script schon verwenden,ist aber auch nicht notwendig.

Hier mal ein Ansatz von mir der nicht funktioniert hat:


sFilename = strOrdner & strExtension
strExtension = ".xls"
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FileExists(strOrdner & strExtension) = False Then
msgbox "Nichts da"
End If

If FSO.FileExists(strOrdner & strExtension) = true Then
msgbox sFilename
end if

Vielen Dank für die Hilfe

Gruß
Claus
Bitte warten ..
Mitglied: bastla
08.10.2007 um 19:14 Uhr
Hallo cbli!

Das etwas erweiterte Grundgerüst:
01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
strOrdner = "d:\exceltemp" 
03.
aTypen = Array("xls", "doc", "txt", "mdb") 
04.
 
05.
For Each sTyp In aTypen 
06.
	iAnz = 0 
07.
	lGr = 0 
08.
 
09.
	For Each oFile In fso.GetFolder(strOrdner).Files 
10.
		If LCase(fso.GetExtensionName(oFile.Path)) = sTyp Then 
11.
			iAnz = iAnz + 1 
12.
			lGr = lGr + oFile.Size 
13.
		End If 
14.
	Next 
15.
 
16.
	Select Case iAnz 
17.
	Case 0 
18.
		WScript.Echo "Es wurde keine " & sTyp & "-Datei gefunden."	 
19.
	Case 1 
20.
		WScript.Echo "Es wurde 1 " & sTyp & "-Datei mit einer Größe von " & FormatNumber(lGr, 0, , , True) & " Bytes gefunden." 
21.
	Case Else 
22.
		WScript.Echo "Es wurden " & CStr(iAnz) & " " & sTyp & "-Dateien mit insgesamt " & FormatNumber(lGr, 0, , , True) & " Bytes gefunden." 
23.
	End Select 
24.
 
25.
Next
Grüße
bastla

P.S.: Die Möglichkeit, dass die Gesamtgröße der gefundenen Dateien eines Typs genau 1 Byte beträgt, habe ich vorsätzlich ignoriert ...
Bitte warten ..
Mitglied: cbli
10.10.2007 um 16:32 Uhr
... oder es einfach selbst umsetzen ...

Als Grundgerüst:
01.
Set fso = 
02.
> CreateObject("Scripting.FileSystemObject") 
03.
> strOrdner = "d:\exceltemp" 
04.
> aTypen = Array("xls", 
05.
> "doc", "txt", 
06.
> "mdb") 
07.
> For Each sTyp In aTypen 
08.
> 	bIsDa = False 
09.
> 	For Each oFile In 
10.
> fso.GetFolder(strOrdner).Files 
11.
> 		If LCase(fso.GetExtensionName(oFile.Path)) 
12.
> = sTyp Then 
13.
> 			bIsDa = True 
14.
> 			Exit For 
15.
> 		End If 
16.
> 	Next 
17.
> 	If bIsDa Then 
18.
> 		WScript.Echo "Mindestens eine " 
19.
> & sTyp & "-Datei ist 
20.
> vorhanden." 
21.
> 	Else 
22.
> 		WScript.Echo "Es ist keine " 
23.
> & sTyp & "-Datei 
24.
> vorhanden."	 
25.
> 	End If 
26.
> Next 
27.
> 

Vielen Dank, funktioniert sehr gut.
Noch eine letzte Frage die nach dem Probelauf aufgekommen ist:

Im weiteren Verlauf meines Scripts werden die gefundenen Excel Dateien in ein anderes
Verzeichnis verschoben. Dies funktioniert auch ,nur eben nicht wenn die Dateien im Zielverzeichnis schon existieren. Überschreiben tut er nicht.
Wie kann ich dem Script mitteilen bei dem Move Befehl ein Überschreiben auszuführen,besser noch zu überschreiben wenn die Dateien gleich groß oder größer sind ?
Habe versucht diesen Part noch in die Schleife einzubauen,mein Ansatz hat aber nicht funktioniert.

if oFile.Size(moveordner) >= oFile.Size(zielordner) then

Wie geht das ?

Vielen Dank

Gruß
Claus
Bitte warten ..
Mitglied: bastla
10.10.2007 um 17:19 Uhr
Hallo cbli!

Unter der Voraussetzung, dass "oFile" die Quelldatei darstellt, könntest Du etwa so vorgehen:
01.
If fso.FileExists(ZielOrdner & "\" & oFile.Name) Then 
02.
	Set oOldFile = fso.GetFile(ZielOrdner & "\" & oFile.Name) 
03.
	If oFile.Size >= oOldFile.Size Then 
04.
		oOldFile.Delete 
05.
		oFile.Move ZielOrdner 
06.
	End If 
07.
Else 
08.
	oFile.Move ZielOrdner 
09.
End If 
10.
 
Grüße
bastla
Bitte warten ..
Mitglied: cbli
10.10.2007 um 18:08 Uhr
Hallo cbli!

Kannst Du kurz erklären, was genau Du
mit dieser Prüfung vorhast bzw in
welcher Form Du deren Ergebnisse
benötigst?

Grüße
bastla

Ich habe ein Script (dank deiner Hilfe) geschrieben,daß unteranderem in einem temp Ordner (d:\exceltemp) nach Dateien mit bestimmten Dateiendungen (eine oder auch mehrere) sucht.
Diese dann auf die Größe prüft und sie im weiteren Verlauf des Scripts irgendwann in einen anderen Ordner verschiebt. Das Prüfen auf Existenz von Dateien mit bestimmten Dateiendungen (eine oder auch mehrere) im Ordner war nur eine reine Komfortsache und habe ich inzwischen erfolgreich ins Script integriert.
Wie gesagt irgendwann werden die gefundenen Dateien verschoben und es kann vorkommen,daß ich vergesse vorher die Dateien vom letzten Mal im Zielordner zu löschen.
Einen automatisches Überschreiben scheint es ja nicht zu geben bei VBS.
Natürlich könnte ich vorher den Zielordner per Script leeren lassen,aber dort können sich noch Dateien befinden ,die ich behalten will.
Deshalb wollte ich die Dateien in d:\exceltemp mit denen im Zielordner vergleichen lassen im Hinblick auf die Größe der Dateien.
DateLastModified hilft mir in diesem Fall nicht im Hinblick auf den Inhalt der Dateien. Also nur die Größe vergleichen und wenn sie gleich groß oder größer sind,dann verschieben ansonsten
msgbox "bla bla bla".
Da auto überschreiben nicht geht,wollte ich eben,wenn größere oder gleich große Dateien gefunden wurden,diese vorher im Zielverzeichnis löschen lassen.

Hier mein Ansatz

01.
 
02.
Set folderZiel= fso.GetFolder("D:\Zielordner\") 
03.
Set oFileZiel = folderziel.Files 
04.
strOrdner = "d:\exceltemp\" 
05.
 
06.
 
07.
aTypen = Array("xls", "doc") 
08.
For Each sTyp In aTypen 
09.
   bIsDa = False 
10.
    For Each oFile In fso.GetFolder(strOrdner).Files 
11.
        If LCase(fso.GetExtensionName(oFile.Path)) = sTyp then 
12.
           bIsDa = True 
13.
           if oFile.Size >= oFileZiel.Size(fso.GetFolder(oFileZiel.Path)) then 
14.
          wshshell.popup "Eine Datei mit der Erweiterung       " & sTyp & "       wird verschoben" _ 
15.
           & vbnewline & vbnewline & "Dateiname:        "  & oFile.name ,1, "Hinweis" 
16.
wshshell.popup "Die Datei:    " & oFile.name & " hat die Größe:   " & oFile.Size & "   <MB" ,2,"Hinweis" 
17.
         oFile.Delete "D:\Zielordner" 
18.
         oFile.Move "D:\Zielordner\" 
19.
          'if oFile.name 
20.
       end if 
21.
      End If 
22.
    Next 
23.
Next
Bitte warten ..
Mitglied: bastla
10.10.2007 um 19:52 Uhr
Hallo cbli!

Nimm Dir einmal etwas Zeit, die Postings in diesem Thread in chronologischer Reihenfolge zu lesen - Du hast gerade auf eine Frage von vorgestern geantwortet ...

Grüße
bastla
Bitte warten ..
Mitglied: cbli
10.10.2007 um 22:36 Uhr
Hallo cbli!

Nimm Dir einmal etwas Zeit, die Postings in
diesem Thread in chronologischer Reihenfolge
zu lesen - Du hast gerade auf eine Frage von
vorgestern geantwortet ...

Grüße
bastla

Oops, mein Fehler. Tut mir leid.
Könnte ein Admin meinen Beitrag an die richtige Stelle verschieben und diesen hier löschen ?

Danke schon mal.

Gruß
Claus
Bitte warten ..
Mitglied: bastla
10.10.2007, aktualisiert 18.10.2012
... und sieh Dir vielleicht auch diesen Beitrag (noch) einmal an ...

Grüße
bastla
Bitte warten ..
Mitglied: cbli
12.10.2007, aktualisiert 18.10.2012
... und sieh Dir vielleicht auch
[http://www.administrator.de/forum/alle-dateien-mit-bestimmter-dateierweiterung-ein-einem-verzeichnis-auf-existenz-pr%c3%bcfen-70399.html#comment-275290
diesen] Beitrag (noch) einmal an ...

Grüße
bastla

So, habe nun Stunden damit zugebracht mein Script zu ändern und zu testen.
Im Grunde funktioniert es, aber nur wenn ich das Script nicht nach der Abfrage (fso.FileExists(zielfolder & "\" & oFile.Name)
in die else Schleife lasse.
Wo ist mein Fehler ?

<code>

aTypen = Array("xls", "doc", "txt", "mdb")

moveordner = "D:\temp\" ' Hier findet die Verarbeitung statt
strOrdner = "D:\exceltemp\" ' Quell Verzeichnis
zielfolder = "D:\Lager\" ' Ziel Verzeichnis
' oFile = Dateien in strordner
' oFileZiel = Dateien in zielfolder (wenn sie bereits existieren sollten)

For Each sTyp In aTypen
bIsDa = False
For Each oFile In fso.GetFolder(moveordner).Files
If LCase(fso.GetExtensionName(oFile.Path)) = sTyp then
bIsDa = True
If fso.FileExists(zielfolder & "\" & oFile.Name) Then
Set oFileZiel = fso.GetFile(zielfolder & "\" & oFile.Name)
If oFile.Size >= oFileZiel.Size Then

msgbox "Quelldatei: " & ofile.name & " " & ofile.size & " ist größer / gleich" _
& vbnewline & "Zieldatei: " & ofileziel.name & " " & ofileziel.size ,64,"Hinweis"
oFileZiel.Delete
oFile.Move zielfolder
End If
else
msgbox "Quelldatei: " & ofile.name & " " & ofile.size & " ist kleiner" _
& vbnewline & "Zieldatei " & ofileziel.name & " " & ofileziel.size ,64,"Hinweis"

oFile.Move zielfolder
oFile.Delete
'End If
end if
end if
next
next

<code>

Vielen Dank nochmal für die Geduld

Gruß
Claus
Bitte warten ..
Mitglied: bastla
12.10.2007 um 13:46 Uhr
Hallo cbli!

Im Else-Zweig versuchst Du ja auch ein "oFile.Move zielordner", was angesichts der Tatsache, dass die Datei im Zielordner schon existiert, natürlich scheitert.

Was möchtest Du im Falle, dass die Quelldatei kleiner ist, eigentlich tun - diese löschen? Wenn ja, dann versuch es so:
01.
aTypen = Array("xls", "doc", "txt", "mdb") 
02.
 
03.
moveordner = "D:\temp\" ' Hier findet die Verarbeitung statt 
04.
strOrdner = "D:\exceltemp\" ' Quell Verzeichnis 
05.
zielfolder = "D:\Lager\" ' Ziel Verzeichnis 
06.
' oFile = Dateien in strordner 
07.
' oFileZiel = Dateien in zielfolder (wenn sie bereits existieren sollten) 
08.
 
09.
For Each sTyp In aTypen 'Dateitypen 
10.
	For Each oFile In fso.GetFolder(moveordner).Files 'Quelldateien 
11.
		If LCase(fso.GetExtensionName(oFile.Path)) = sTyp Then 'Typ 
12.
			If fso.FileExists(zielfolder & "\" & oFile.Name) Then 'Zieldatei 
13.
				Set oFileZiel = fso.GetFile(zielfolder & "\" & oFile.Name) 
14.
				If oFile.Size >= oFileZiel.Size Then 'Dateigröße 
15.
					msgbox "Quelldatei: " & ofile.name & " " & ofile.size & " ist größer / gleich" _ 
16.
						& vbnewline & "Zieldatei: " & ofileziel.name & " " & ofileziel.size ,64,"Hinweis" 
17.
					oFileZiel.Delete 
18.
					oFile.Move zielfolder 
19.
				Else 'Quelldatei kleiner 
20.
					msgbox "Quelldatei: " & ofile.name & " " & ofile.size & " ist kleiner" _ 
21.
						& vbnewline & "Zieldatei " & ofileziel.name & " " & ofileziel.size ,64,"Hinweis" 
22.
 
23.
					oFile.Delete 'Quelldatei löschen 
24.
				End If 'Dateigröße 
25.
			Else 'Zieldatei nicht vorhanden 
26.
				oFile.Move zielfolder 
27.
			End If 'Zieldatei 
28.
		End If 'Typ 
29.
	Next 'Quelldateien 
30.
Next 'Dateitypen
Grüße
bastla

P.S.: Zum Schließen des < code>-Blocks musst Du ein < /code> verwenden ...
Bitte warten ..
Mitglied: cbli
15.10.2007 um 13:12 Uhr
P.S.: Zum Schließen des <
code>-Blocks musst Du ein < /code>
verwenden ...



Hallo Bastla

Danke für den Hinweis und deine Hilfe.

Dieser Beitrag kann jetzt auf gelöst gesetzt werden.

Mit freundlichen Grüßen
Claus
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Dateien in einem Verzeichnis mergen - rekursiv (10)

Frage von frad1980 zum Thema Batch & Shell ...

Batch & Shell
gelöst EDI Dateien auf Inhalt prüfen und verschieben (6)

Frage von ThomasKern zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...