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

VBScript - Ordner auf Inhalt prüfen?

Frage Entwicklung Batch & Shell

Mitglied: Imrazor

Imrazor (Level 1) - Jetzt verbinden

09.02.2010, aktualisiert 18.10.2012, 14772 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 ..
Ähnliche Inhalte
Batch & Shell
Inhalt einer .csv mit PowerShell prüfen
gelöst Frage von Memo66Batch & Shell10 Kommentare

Hallo zusammen, ich bin noch bisschen am hin und her überlegen wie ich das Problem am besten löse: Ich ...

VB for Applications
Outlook Email VBScript Inhalt
gelöst Frage von TheFalconVB for Applications2 Kommentare

Hallo zusammen, habe hier ein kleines VBScript welches fast perfekt läuft: Er werden jetzt die Inhalte wie folgt ausgegeben: ...

Batch & Shell
Variable auf Inhalt prüfen
gelöst Frage von PinkFLuffyUnicornBatch & Shell1 Kommentar

Hi, ich sitze jetzt schon den halben tag daran eine if schleife zu erstellen die mir sagt ob Variable ...

Batch & Shell
EDI Dateien auf Inhalt prüfen und verschieben
gelöst Frage von ThomasKernBatch & Shell6 Kommentare

Hallo zusammen, ich habe gerade eine Aufgabe zu bewältigen bei welcher ich seit mehreren Tagen nicht weiterkomme. Evtl. hat ...

Neue Wissensbeiträge
Linux

Limux-Ende in München: Wie ein Linux Projekt unter Ausschluss der Öffentlichkeit zerstört wurde

Information von Frank vor 1 StundeLinux6 Kommentare

Mein persönlicher Kommentar zum Thema "Limux-Ende". Die SPD-Politikerin Anne Hübner hat die Richtung von München ganz klar definiert: "Wir ...

Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 1 TagBatch & Shell9 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 1 TagHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Heiß diskutierte Inhalte
Router & Routing
Zwei Netzwerke erstellen
Frage von bunteblumeRouter & Routing13 Kommentare

Hallo Zusammen, Ich möchte gerne ein backup von einem bestimmten Folder welcher auf dem Server regelmässig synchronisiert wird auf ...

Off Topic
Fachkräftemangel in Deutschland? - Talentschmiede schreibt alle 2 Tage die gleichen Stellen aus
Frage von Penny.CilinOff Topic12 Kommentare

Hallo, haben wir in Deutschland Fachkräftemangel? Die Talentschmiede schreibt gefühlt alle zwei Tage dieselben Stellen aus. Und das schon ...

Microsoft Office
Outlook Cache Mode Frage
Frage von GwaihirMicrosoft Office11 Kommentare

Hallo zusammen, bin gerade neu in der Firma und lerne hier einige neue Dinge kennen. Zum Beispiel, dass die ...

Windows Server
Windows Store Apps
gelöst Frage von PeterleBWindows Server11 Kommentare

Gibt es einen Weg, auf Windows Server 2016 Windows Store Apps wie zum Beispiel die HP Smart App zu ...