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

VBScript - Ordner auf Inhalt prüfen?

Frage Entwicklung Batch & Shell

Mitglied: Imrazor

Imrazor (Level 1) - Jetzt verbinden

09.02.2010, aktualisiert 18.10.2012, 14159 Aufrufe, 18 Kommentare

Mit einem VBScript prüfen, ob in einem Ordner Dateien vorhanden sind?

Hallo Leute!

Wie bereits in meinem Beitrag http://www.administrator.de/index.php?content=135255 beschrieben, habe ich ein Skript gebastelt, dass mir alle Dateien verschiebt bzw. kopiert.

Nun habe ich festgestellt, dass es zu einer Fehlermeldung kommt, wenn im Ordner keine Dateien vorhanden sind.

Ich wollte also eine Abfrage einbaun, die prüft, ob in diesem Ordner Dateien vorhanden sind und wenn ja, dann sollten diese verschoben werden. Wenn nein, soll einfach nix gemacht werden.

Füre ich das Skript aus, passiert einfach gar nichts. Es wird also nichts verschoben, selbst wenn Dateien vorhanden sind.

Hat jemand einen Rat, wie man am besten eine solche Abfrage programmiert?


Hier die ganze Verschiebe-Funktion:

01.
Function Move(Quellpfad, Zielpfad) 
02.
 
03.
Set FSO = CreateObject("Scripting.FileSystemObject") 
04.
Set Quelle = FSO.GetFolder(Quellpfad) 
05.
Set Ziel = FSO.GetFolder(Zielpfad) 
06.
 
07.
If FSO.FileExists(Quellepfad & "\*.*") then 
08.
 
09.
	FSO.MoveFile Quellpfad & "\*.*", Zielpfad & "\" 
10.
Else 
11.
	 
12.
End if 
13.
 
14.
End Function
Mitglied: 76109
09.02.2010 um 12:54 Uhr
Hallo Imrazor!

FileExists funktioniert nicht mit Wildcards, nur mit expliziten Dateipfaden.

Mach es über eine Each-Schleife:
Wenn keine Datei, dann keine Aktion
Wenn eine oder mehrere Dateien, dann alle Datei verschieben

Mindestens 1 Datei, Befehl ausführen und Schleife beenden
01.
For Each File in Quelle.Files 
02.
    FSO.MoveFile Quellpfad & "\*.*", Zielpfad & "\":  Exit For 
03.
Next
Gruß Dieter
Bitte warten ..
Mitglied: KingNothing
09.02.2010 um 12:58 Uhr
01.
If FSO.FileExists(Quellepfad & "\*.*") then 
Zunächst mal hast du da einen Tippfehler drin, laut deinen Variablen müsste es "Quellpfad" heißen anstelle von "Quellepfad"

Eine Möglichkeit, die auch im Script-Center von Microsoft steht, ist, auf die Ordnergröße zu prüfen.
Das Ordner-Objekt Quelle hast du ja schon erzeugt, dann kann man es auch direkt dafür verwenden.

01.
If (Not(Quelle.Size = 0)) Then 
02.
     ' Dein Code 
03.
End if
Gruß martin
Bitte warten ..
Mitglied: 76109
09.02.2010 um 13:37 Uhr
Hallo Imrazor!

Der Vorschlag von KingNothing ist natürlich besser, aber dann würde ich es so machen:
01.
Sub Move(Quellpfad, Zielpfad) 
02.
 
03.
    Set FSO = CreateObject("Scripting.FileSystemObject") 
04.
 
05.
    If FSO.GetFolder(Quellpfad).Files.Count > 0 Then 
06.
        FSO.MoveFile Quellpfad & "\*.*", Zielpfad & "\" 
07.
    End If 
08.
End Sub
Gruß Dieter
Bitte warten ..
Mitglied: Imrazor
09.02.2010 um 14:05 Uhr
Vielen Dank für die schnelle Hilfe, beides funktioniert einwandfrei!

Bin echt begeistert von den schnellen und kompenten Antworten, die ich hier immer kriege! Großes Lob!
Bitte warten ..
Mitglied: KingNothing
09.02.2010 um 16:09 Uhr
Das ist natürlich die Optimalere Lösung,
das andere hatte ich nur nach relativ schnellem Suchen gefunden (Script-Center aufm Desktop)

Gruß Martin
Bitte warten ..
Mitglied: 76109
09.02.2010 um 17:09 Uhr
Hallo Martin!

Deine Anregung war aber insofern gut, weil ich aus dem Stehgreif garnicht lange überlegt habe und erst durch Dich, auf die sinnvollere Lösung gekommen bin

Also, haben wir beide in Teamarbeit eine optimale Lösung gefunden

Gruß Dieter
Bitte warten ..
Mitglied: Duswald
03.01.2011 um 21:51 Uhr
Das ist genau das script snippet das ich gesucht habe. Es scheint mir hier genau die Menschen zu geben, die mir vielleicht ein wenig helfen könnten mit vbs

Wenn ich die Sub richtig verstehe, stellt sie fest, ob ein verzeichniss lehr ist oder nicht.

das ist genau was ich suchte.
so nun habe ich eine kleine Herrausforderung vor der ich stehe und kenn mich null aus mit vbs

also ich habe ein Verzeichnis in dem sind mehrere Unterverzeichnisse. Diese sollen jetzt darauf untersucht werden ob sie lehr sind, und wenn nicht, sollte jeweils für ein verzeichnis wo ne datei drin ist, folgende Zeilen in eine xml Datei eigefügt werden:

01.
        <line> 
02.
            <mode>Execute</mode> 
03.
            <entry>NameDesUnterverzeichnisesMitInhalt</entry> 
04.
            <count>3</count> 
05.
            <options>0</options> 
06.
        </line>
bei jeden aufruf sollte die xml datei lehr gemacht werden und die zeilen neu reingeschrieben werden .. geht sowas mit vbs und wie könnt ich das realisieren?

Danke für jeden Tipp
Andy
Bitte warten ..
Mitglied: Biber
03.01.2011 um 22:05 Uhr
Moin Duswald,

willkommen im neuen Jahr und im Forum.

Ich habe gesehen, dass du als in deinem Profil "Beruf: Creative Director" angegeben hast.
Das entschuldigt aber nicht alles.

Bitte mach noch mal mit orthografisch etwas konservativerer Schreibweise einen neuen Beitrag auf, da erstens die noch folgenden nötigen Rückfragen einen eigenen Beitrag rechtfertigen und zweitens ja nun das Ermitteln der Datei-Anzahl je Ordner nur der kleinere Teil des Problems ist.

Dieser Beitrag hier ist eigentlich hinreichend beantwortet.

Grüße
Biber
Bitte warten ..
Mitglied: Duswald
03.01.2011 um 22:14 Uhr
Zitat von Biber:
Moin Duswald,

willkommen im neuen Jahr und im Forum.

Ich habe gesehen, dass du als in deinem Profil "Beruf: Creative Director" angegeben hast.
Das entschuldigt aber nicht alles.

Bitte mach noch mal mit orthografisch etwas konservativerer Schreibweise einen neuen Beitrag auf, da erstens die noch folgenden
nötigen Rückfragen einen eigenen Beitrag rechtfertigen und zweitens ja nun das Ermitteln der Datei-Anzahl je Ordner nur
der kleinere Teil des Problems ist.

Dieser Beitrag hier ist eigentlich hinreichend beantwortet.

Grüße
Biber

Danke Für den Hinweis Biber und auch allen im Forum ein gutes neues Jahr
Gegen meine latente Rechtschreibschwäche kämpf ich seit 30 Jahre das wird wohl mit dem Alter nicht mehr besser, aber Du hast Recht, ich werd das neu Posten und dann auch andere schon vorhandene Ansätze gleich mit einbauen in die Frage, aber heut wirds nix mehr, ich versuch es dann morgen zu schaffen.
Danke und bis morgen wenn möglich
Bitte warten ..
Mitglied: Duswald
03.01.2011 um 23:34 Uhr
Hallo Nochmal kurz

Hab ein wenig rumgegoogelt und verschiedene Snippets zusammengewürfelt und Plötzlich hatte ich dann die Lösung zusammengebracht ...

Auch ein Blindes Legesteniker Huhn findet ab und an ma ein Korn.

hier meine Lösung zu der gestellten Frage von Vorhin:

01.
Dim fsoA, tfA, cnt   
02.
Const FOR_READING = 1 
03.
 
04.
set myWs = CreateObject("Wscript.Shell")  
05.
 
06.
Sub ShowFolderList(folderspec, tf) 
07.
    Dim fs, f, f1, fc, s 
08.
    Set fs = CreateObject("Scripting.FileSystemObject") 
09.
    Set f = fs.GetFolder(folderspec) 
10.
    Set fc = f.SubFolders 
11.
    For Each f1 in fc 
12.
		If f1.Files.Count > 1 Then 
13.
		Select Case f1.name 
14.
		Case "Apple Software Update": 
15.
        'inix machen 
16.
		Case Else 
17.
		    tf.WriteLine("    <line>") 
18.
		    tf.WriteLine("        <mode>Execute</mode>") 
19.
		    tf.WriteLine("        <entry>" & f1.name & "</entry>") 
20.
		    tf.WriteLine("        <count>3</count>") 
21.
		    tf.WriteLine("        <options>0</options>") 
22.
		    tf.WriteLine("    </line>") 
23.
		 
24.
	        s = s & f1.name 
25.
	        s = s &  vbCrLf 
26.
		End Select 
27.
		End If 
28.
    Next 
29.
    MsgBox s 
30.
End Sub 
31.
 
32.
 
33.
Set fsoA = CreateObject("Scripting.FileSystemObject") 
34.
Set tfA = fsoA.CreateTextFile("C:\000test.txt", True) 
35.
tfA.WriteLine("#EXTM3U") 
36.
ShowFolderList "c:\Programme", tfA  
37.
tfA.Close
Das is es was ich im Prinzip wollte ... Bisserl finetunen noch ... aber dann gehts schon.
Dann mach ich nicht extra noch nen thread auf und hoffe, das der ein oder andere Besucher das dann auch irgendwie sinnvoll findet und verwenden kann.

Liebe Grüße aus Bayern: Andy
Bitte warten ..
Mitglied: Duswald
03.01.2011 um 23:40 Uhr
ahh kurz zur erklärung noch, es werden da jetzt nur zu testzwecken die folders C:/Programme genutzt.
Mit dem Select case, kann ich dann noch bestimmte Folders generell ausschliesen vom erfassen. Da gäbs warscheinlich noch elegantere methoden für, aber es is halt ne quick n Dirty Lösung meinem vbs horizont entsprechend
Bitte warten ..
Mitglied: KingNothing
04.01.2011 um 08:39 Uhr
Hi,

Frohes neues Jahr zusammen!

Nur noch ein, nein besser zwei kleine Tipps am Rande für dich als VBS-Neuling:

1. Aussagekräftige Variablenbezeichnungen: Soweit ich weiss, gibt es in VBS kein Limit für Variablennamen, daher würde ich immer möglichst gut beschreibende Namen verwenden.
Also z.B. anstelle von "For Each f1 in fc"
kann man machen: "For Each folder in folderList"

2. Kommentare: Kommentier' deinen Code. Besser ist das.
Kommentare kannst du mit ' einfügen. Wenn du einen Editor wie z.B. SciTE benutzt, dann gibts für's Ein- und Auskommentieren sogar Shortcuts.

Wenn du diese zwei Tipps noch berücksichtigst, wirst du es dir selber später danken, nämlich dann, wenn du oder einer deiner Kollegen deinen eigenen Code lesen/verstehen/ändern muss(t). Ohne Kommentare ist das schwerer als es sich jetzt anhört, insbesondere für andere.

LG Martin
Bitte warten ..
Mitglied: bastla
04.01.2011 um 15:27 Uhr
... und wenn schon Deklarationen (mit "Dim"), dann aber auch für alle Variablen (auch wenn sie, wie "myWs", entbehrlich sind - die wird nämlich ebenso wenig verwendet wie die Konstante aus Zeile 2 ). Wenn dann noch ein "Option Explicit" am Anfang des Scripts steht, kannst Du auch falsch geschriebene Variablennamen sehr leicht finden ...

Grüße
bastla
Bitte warten ..
Mitglied: KingNothing
04.01.2011 um 16:11 Uhr
Stimmt, das obligatorische Option Explicit hab ich vergessen. Asche auf mein Haupt ;)
Und wieder ein Schritt richtung sauberer Code ...

LG Martin
Bitte warten ..
Mitglied: Duswald
04.01.2011 um 18:12 Uhr
Danke für den Hinweis, das hab ich halt aus irgendwelchen Skripten so zusammenkopiert, bis dass es das gemacht hat was ich wollte, deshalb sind wohl auch sachen drin die ich gar nicht brauchte

Danke euch
Bitte warten ..
Mitglied: Duswald
04.01.2011 um 18:13 Uhr
ha - Jetzt doch noch eine Frage

was müßte ich da rein schreiben, damit er Dateien, die älter als 3 Tage sind und mp3 als dateiendung haben beim du8rchlaufen gleich rauslöscht?
Bitte warten ..
Mitglied: Biber
04.01.2011 um 18:24 Uhr
Moin Duswald,

Zitat von Duswald:
ha - Jetzt doch noch eine Frage

was müßte ich da rein schreiben, damit er Dateien, die älter als 3 Tage sind und mp3 als dateiendung haben beim
du8rchlaufen gleich rauslöscht?
Wie wäre es mit
"Hallo Moderator, bitte diesem Beitrag schliessen, bevor ich immer weiter von Ästlein auf Zweiglein komme,
bevor ich endlich einen eigenen Beitrag zu meinen eigenen Anforderungen aufmache."


Zur Not kannst du auch das "bitte" weglassen

Grüße
Biber

Manchmal denke ich, das Ansingen gegen eine rauschende Brandung wäre viel stressärmer als dieses erbärmliche Halbmod-Dasein hier im Forum....
<tiefer Seufzer>
Bitte warten ..
Mitglied: Duswald
06.01.2011, aktualisiert 18.10.2012
Hallo Biber - also ich hab jetzt mal nach anweisungen von hier das Script etwas verändert, aber es klappt nicht und deshalb habe ich wie du wolltest eine neue Frage aufgemacht um hier das nun zu beenden. Die neue Frage ist hier ...
http://www.administrator.de/forum/ordner-durchsuchen-und-namen-in-xml-d ...
Und ich hoffe, dass ich sie richtig plaziert habe.

Danke euch mal soweit für eure Hilfe
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

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

Frage von ThomasKern zum Thema Batch & Shell ...

Batch & Shell
gelöst Variable auf Inhalt prüfen (1)

Frage von PinkFLuffyUnicorn zum Thema Batch & Shell ...

Exchange Server
Inhalt von Postfächern in Exchange löschen (9)

Frage von m.reeger zum Thema Exchange Server ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...