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?

Mitglied: Imrazor

Imrazor (Level 1) - Jetzt verbinden

09.02.2010, aktualisiert 18.10.2012, 15780 Aufrufe, 18 Kommentare

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

Hallo Leute!

Wie bereits in meinem Beitrag https://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 ...
https://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
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: ...

Microsoft Office
Outlook VBScript
gelöst Frage von NebellichtMicrosoft Office5 Kommentare

Hallo, seit ein paar Wochen werden keine VBScripte hinter den (Benutzerspezifschen) Outlook Formularen ausgeführt. Hat jemand eine Lösung parat ...

VB for Applications
VBScript und OR
gelöst Frage von InvisanVB for Applications5 Kommentare

Hi zusammen, derzeit bastel ich ein bisschen in VBScript rum. Leider habe ich mit dem OR Operator einige Probleme. ...

VB for Applications

VBScript mit Administratorrechten startet kein weiteres VBScript

gelöst Frage von KrautundRuebenVB for Applications9 Kommentare

Hallo, ich möchte ein VBScript innerhalb eines VBScripts aufrufen. Dies gelingt auch ohne Administratorrechte problemlos. Starte ich hingegen das ...

Neue Wissensbeiträge
Windows 7
Win7 Update scheitert KB4512506
Information von infowars vor 5 StundenWindows 7

Falls jemand auch das Problem hat mit dem: Monatliches Sicherheitsqualitätsrollup für Windows 7 für x64-basierte-Systeme (KB4512506) Das scheint mit ...

Humor (lol)
Wenn hacken nach hinten los geht
Information von em-pie vor 1 TagHumor (lol)4 Kommentare

Moin, weil heute Freitag ist, nachfolgender kurzer Artikel zum schmunzeln:) l+f: NULL ist ein notorischer Falschparker

Windows Update
Windows: August 2019 Patchday-Probleme
Information von kgborn vor 1 TagWindows Update3 Kommentare

Ich kippe mal einige kurze Informationen hier rein - vielleicht hilft es Betroffenen. Die August 2019-Updates für Windows haben ...

Sicherheits-Tools
Kaspersky "Sicherheitslösung"
Information von Looser27 vor 2 TagenSicherheits-Tools1 Kommentar

Wieso überrascht mich das nicht wirklich? Kaspersky gefährdet Privatsphäre

Heiß diskutierte Inhalte
SAN, NAS, DAS
Leiser stromsparender Debian EXT4 NAS-Heimserver: ECC-RAM wie betreiben?
Frage von Laser12SAN, NAS, DAS25 Kommentare

Moin, aktuell stelle ich einen Rechner zusammen, den mein Computerhändler bauen wird. Nach Jahrzehnten mit Desktops und zwei Notebooks ...

LAN, WAN, Wireless
VPN Tunnel zu PiVPN steht, aber kein Internet
gelöst Frage von KabuntelLAN, WAN, Wireless18 Kommentare

Hallo Community, habe heute PiVPN auf meinem Raspberry Pi 3b+ installiert, mit dem How To vom Kuketz-Blog Ich kann ...

Netzwerkgrundlagen
Proxmox auf dedicated Root Server mit nur einer IP nutzen
gelöst Frage von ndreier933Netzwerkgrundlagen12 Kommentare

Hallo Community, ich bin neu hier im Forum und weiß nicht ob ich das Thema richtg zugeordnet habe?Zusätzlich habe ...

Router & Routing
PfSense routing OpenVPn und IPSec
Frage von TheOnlyOneRouter & Routing11 Kommentare

Hallo zusammen, ich habe 3 Standorte die per VPN miteinander verbunden sind. (siehe Bild) Nun stehe ich vor der ...