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

VBS, IF-Bedingung an Funktion übergeben

Frage Entwicklung Batch & Shell

Mitglied: PSaR04

PSaR04 (Level 1) - Jetzt verbinden

06.11.2012 um 18:16 Uhr, 3754 Aufrufe, 6 Kommentare

Hallo,

ich bin dabei ein Skript in VBS zu schreiben und dabei auf ein Problem gestoßen. Ich habe eine Funktion erstellt, in der abhängig von einer IF-Bedingung eine Datei gelöscht werden soll. Die Bedingung zum Löschen soll als Parameter an die Funktion übergeben werden, ist das irgendwie möglich?

Hier mal ein Beispiel (die Funktion ist stark verkürzt):


01.
fDateiLoeschen(left(objFile.Name, 3) = "abc") 
02.
 
03.
 
04.
function fDateiLoeschen (strBedingung) 
05.
 
06.
IF strBedingung Then objFile.delete 
07.
 
08.
end function

Die IF-Bedingung in der Funktion würde ohne den Übergabeparameter dann so aussehen:
01.
IF left(objFile.Name, 3) = "abc" Then objFile.delete

Hinweis: objFile.Name gibt den Namen der Datei zurück, etwa "abc2012.txt"



Das Ganze funktioniert jetzt natürlich nicht, da es das Objekt objFile nur innerhalb der Funktion gibt. Ich müsste diese Bedingung also möglichst als String oder Parameter übergeben, ohne, dass schon bei der Übergabe versucht wird den Namen des Objekts abzurufen.


Ich hoffe das war einigermaßen verständlich.

PSaR04
Mitglied: rubberman
06.11.2012, aktualisiert um 18:59 Uhr
Hallo PSaR04.

Das ist kein besonders guter Stil. Du kannst das If Statement auch vorher im Code ausführen. Aber um deine Frage zu beantworten: Schau dir mal die Eval() Funktion an.
01.
Sub fTest(strBedingung) 
02.
  If Eval(strBedingung) Then 
03.
    WScript.Echo strBedingung & " ist WAHR." 
04.
  Else 
05.
    WScript.Echo strBedingung & " ist FALSCH." 
06.
  End If 
07.
End Sub 
08.
 
09.
fTest "1=1" 
10.
fTest "1<1"
Grüße
rubberman
Bitte warten ..
Mitglied: PSaR04
06.11.2012 um 19:12 Uhr
Danke dafür erstmal. Da du schreibst, dass das kein so guter Stil ist, wie wäre es denn besser?

Dein Code funktioniert übrigens, allerdings klappt es bei mir noch nicht, da ich immer die Meldung erhalte, dass das Objekt objFile erforderlich ist.
Bitte warten ..
Mitglied: rubberman
06.11.2012 um 19:31 Uhr
Hallo PSaR04.

Wie schon geschrieben, das If Statement vorher ausführen und in Abhängigkeit vom Ergebnis die Funktion zum Löschen ausführen.

Die Fehlermeldung deutet darauf hin, dass objFile in der Prozedur/Funktion keine Gültigkeit hat. Entweder du deklarierst objFile als globale Variable (auch wieder kein guter Stil), oder du übergibst das Objekt ByRef als weiteren Parameter mit an die Prozedur/Funktion.

Grüße
rubberman
Bitte warten ..
Mitglied: PSaR04
06.11.2012 um 19:38 Uhr
Mmmh, das Problem daran ist allerdings, dass das Objekt erst innerhalb der Funktion instanziiert wird und außerhalb nicht existiert.
Bitte warten ..
Mitglied: rubberman
06.11.2012 um 20:47 Uhr
Hallo PSaR04.

Ich sehe keinen Grund warum das nicht funktionieren soll (aber ich kenne ja auch deinen Code nicht).

Erstelle mal eine Textdatei "test.txt" im selben Verzeichnis und führe folgendes Script aus:
01.
Sub fTest(strBedingung) 
02.
  Set objFSO = CreateObject("Scripting.FileSystemObject") 
03.
  Set objFile = objFSO.GetFile("test.txt") 
04.
  If Eval(strBedingung) Then 
05.
    WScript.Echo strBedingung & " ist WAHR." 
06.
  Else 
07.
    WScript.Echo strBedingung & " ist FALSCH." 
08.
  End If 
09.
End Sub 
10.
 
11.
fTest "LCase(objFSO.GetExtensionName(objFile.Name))=""txt""" 
12.
fTest "LCase(objFSO.GetExtensionName(objFile.Name))=""jpg"""
Grüße
rubberman
Bitte warten ..
Mitglied: PSaR04
06.11.2012 um 21:27 Uhr
Zitat von rubberman:
Hallo PSaR04.

Ich sehe keinen Grund warum das nicht funktionieren soll (aber ich kenne ja auch deinen Code nicht).

Erstelle mal eine Textdatei "test.txt" im selben Verzeichnis und führe folgendes Script aus:
01.
> Sub fTest(strBedingung) 
02.
>   Set objFSO = CreateObject("Scripting.FileSystemObject") 
03.
>   Set objFile = objFSO.GetFile("test.txt") 
04.
>   If Eval(strBedingung) Then 
05.
>     WScript.Echo strBedingung & " ist WAHR." 
06.
>   Else 
07.
>     WScript.Echo strBedingung & " ist FALSCH." 
08.
>   End If 
09.
> End Sub 
10.
>  
11.
> fTest "LCase(objFSO.GetExtensionName(objFile.Name))=""txt""" 
12.
> fTest "LCase(objFSO.GetExtensionName(objFile.Name))=""jpg""" 
13.
> 
Grüße
rubberman



Hi,

vielen Dank, jetzt gehts. Der Fehler, den ich gemacht habe war, dass ich die Namen nicht, wie in deinem letzten Post "txt" und "jpg" in doppelte Anführungszeichen gepackt habe.

Wenn ich aus meinem ersten Post die erste Code-Zeile wie folgt ändere gehts:
01.
fDateiLoeschen("left(objFile.Name, 3) = ""abc""")
Grüße
PSaR04
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Powershell - if Bedingung
gelöst Frage von pps4535Batch & Shell4 Kommentare

Moin, moin, ich dachte ich mal einen neuen Thread auf, damit es geordnet abläuft :-) Hier habe ich schon ...

C und C++
C if bedingung
gelöst Frage von MarabuntaC und C++1 Kommentar

Hallo, ich kann zwar kein C, habe aber trotzdem eine Frage: Was wird in der "if bedingung" alles geprüft ...

Microsoft Office
EXCEL IF Bedingung in VBA erstellen
Frage von user2k14Microsoft Office8 Kommentare

Hallo Zusammen, Wie kann ich mehrere If Bedingungen in VBA abbilden und diese dann durch einen Button in Excel ...

Microsoft Office
IF Bedingungen in EXCEL (VBA) erstellen
gelöst Frage von user2k14Microsoft Office9 Kommentare

Hallo Leute, ich möchte gerne in einer Spalte alle Zellen überprüfen, ob ein bestimmter Text dort enthalten ist, wenn ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 1 TagWindows 107 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 2 TagenInternet5 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 TagenDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell20 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless8 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Windows Server
Ping auf einen bestimmten Server nicht möglich
gelöst Frage von a.thierWindows Server7 Kommentare

Hallo, ich habe folgendes Problem. srv-dc1: Ping srv-nav > geht Ping srv-exchange > geht nicht srv-exchange: Ping srv-dc1 > ...