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 If exist - if not exist in .vbs - Datei

Mitglied: Komoran12

Komoran12 (Level 1) - Jetzt verbinden

11.08.2017 um 14:44 Uhr, 1429 Aufrufe, 24 Kommentare

Moin, moin,

vielleicht hat jemand ja einen Tipp für mich. Mit nachfolgender .vbs lasse ich mir einen Messagebox ausgeben:

01.
msgbox"Konvertierung abgeschlossen!" & vbCrLf & "" & vbCrLf & "Konvertierung abgeschlossen! ",64,"Konvertierung abgeschlossen!"
Allerdings würde ich jetzt gerne diese nur ausgeben lassen, wenn ich einem bestimmten Verzeichnis (%userprofile%\Temp) .txt Dateien liegen.

Jetzt dachte ich daran, es wie folgt zu lösen:

01.
set quelle=%userprofile%\Temp\*.txt
02.
if exist "%quelle%"  goto :test
03.
if not exist ""%quelle%"" goto :EOF
04.
:test
05.
msgbox"Konvertierung abgeschlossen!" & vbCrLf & "" & vbCrLf & "Konvertierung abgeschlossen! ",64,"Konvertierung abgeschlossen!"
Allerdings funktioniert das leider nicht! Hat jemand eine Idee, dass anders zu lösen?

Beste Grüße!
Mitglied: emeriks
11.08.2017, aktualisiert um 15:09 Uhr
Hi,
na ja, man kan nicht einfach so Batch nach VBscript "kopieren". Bei Powershell mag das ja z.T. noch gehen.

1. Syntax lautet "if ... then ..."
2. Die Existenz mehrerer Dateien kann man eh so nicht abfragen. Das machst Du in VBscript z.B. mit Scripting.FileSystemObject.

So etwa
01.
dim WshShell : set WshShell = CreateObject("Wscript.Shell")
02.
dim FSO : set FSO = CreateObject("Scripting.FileSystemObject")
03.
dim Path : Path = WshShell.ExpandEnvironmentStrings("%userprofile%") & "\Temp"
04.
dim File
05.
for each File in FSO.GetFolder(Path).Files
06.
  if lcase(right(File.Name,4)) = ".txt" then
07.
    msgbox "Konvertierung abgeschlossen!" & vbCrLf & "" & vbCrLf & "Konvertierung abgeschlossen! ",64,"Konvertierung abgeschlossen!"
08.
    exit for
09.
  end if
10.
next
E.
Bitte warten ..
Mitglied: em-pie
11.08.2017, aktualisiert um 15:45 Uhr
Moin,

dein Problem ist, dass du Batch und vbs vermischt:
Du versuchst die Variable quelle mit %-Zeichen anzusprechen.
Dass Variablen via %-Zeichen angesprochen werden, ist jedoch eine Terminologie des Batch-Scriptings

Genauso wie das Zuweisen einer Variable.

Klassischerweise funktioniert das Zuweisen und "Abrufen" wie folgt:
01.
'Deklarieren
02.
DIM strVar
03.

04.
'Zuweisen
05.
strVar = "Meine Variable"
06.

07.
'Verwenden:
08.
wscript.echo strVar
um zu prüfen, ob Dateien zunächst vorhanden sind, schaue dir mal die Methode GetFolder an.

Hier kannst du dann z.B. für jede Datei prüfen (mittels for each objFile in objGetFolders), ob die Extension "txt" entspricht und einen Zähler hochlaufen lassen.
Ist deiner Counter >0, dann lässt du die msgbox "anspringen"...

Hilfen findest du hier:
https://msdn.microsoft.com/de-de/library/f1xtf7ta(v=vs.84).aspx
http://www.vbsedit.com/html/867057a0-50cf-4613-84be-28bf908b23a7.asp
https://stackoverflow.com/questions/4200028/vbscript-list-all-pdf-files- ...
https://stackoverflow.com/questions/6759299/check-to-see-if-any-file-exi ...

Gruß
em-pie

€dit: Typo &

Emeriks Variante bedeutet, dass du bei jeder vorhandenen *.txt-Datei eine msgbox erhälst, bei 3000-Dateien also 3000 Msg-Boxen...

€dit2: Gestrichenes erklärt sich unten!
Bitte warten ..
Mitglied: emeriks
11.08.2017 um 15:15 Uhr
Emeriks Variante bedeutet, dass du bei jeder vorhandenen *.txt-Datei eine msgbox erhälst, bei 3000-Dateien also 3000 Msg-Boxen...
Nein, bedeutet sie nicht!
Bitte warten ..
Mitglied: beidermachtvongreyscull
11.08.2017 um 15:41 Uhr
Zitat von em-pie:
Emeriks Variante bedeutet, dass du bei jeder vorhandenen *.txt-Datei eine msgbox erhälst, bei 3000-Dateien also 3000 Msg-Boxen...

Wenn Du Zeile 8 und Zeile 9 von @emeriks Code anschaust, siehst Du es.
Trifft die if-Abfrage zu wird in Zeile 8 die for-Schleife schon wieder verlassen.
Die msgbox kommt also nur einmal auf bei der ersten gefundenen txt-Datei.
Bitte warten ..
Mitglied: em-pie
11.08.2017 um 15:44 Uhr
jo... ihr habt recht, das exit for habe ich glattweg überlesen...
Verzeiht mir bitte!
Bitte warten ..
Mitglied: emeriks
11.08.2017 um 16:08 Uhr
Verzeiht mir bitte!
Niemals!
Bitte warten ..
Mitglied: Komoran12
11.08.2017 um 16:26 Uhr
Zitat von emeriks:

Hi,
na ja, man kan nicht einfach so Batch nach VBscript "kopieren". Bei Powershell mag das ja z.T. noch gehen.

1. Syntax lautet "if ... then ..."
2. Die Existenz mehrerer Dateien kann man eh so nicht abfragen. Das machst Du in VBscript z.B. mit Scripting.FileSystemObject.

So etwa
01.
> dim WshShell : set WshShell = CreateObject("Wscript.Shell")
02.
> dim FSO : set FSO = CreateObject("Scripting.FileSystemObject")
03.
> dim Path : Path = WshShell.ExpandEnvironmentStrings("%userprofile%") & "\Temp"
04.
> dim File
05.
> for each File in FSO.GetFolder(Path).Files
06.
>   if lcase(right(File.Name,4)) = ".txt" then
07.
>     msgbox "Konvertierung abgeschlossen!" & vbCrLf & "" & vbCrLf & "Konvertierung abgeschlossen! ",64,"Konvertierung abgeschlossen!"
08.
>     exit for
09.
>   end if
10.
> next
11.
> 
E.

Hi emeriks,

genau sowas habe ich gesucht und versucht, vielen Dank, ich werde es gleich mal direkt testen.

Kann ich das so anpassen, dass er die Messagebox nur ausgibt, wenn nur bestimmte .txt Dateien vorhanden sind?
Alles eine .txt Datei die zu einem mit convert.... anfängt und die zweite die mit complete... anfängt.
Bitte warten ..
Mitglied: emeriks
11.08.2017, aktualisiert um 16:30 Uhr
Kann ich das so anpassen, dass er die Messagebox nur ausgibt, wenn nur bestimmte .txt Dateien vorhanden sind?
Ja.
Alles eine .txt Datei die zu einem mit convert.... anfängt und die zweite die mit complete... anfängt.
Kann ich nicht beantworten. Ich verstehe den Text nicht.
Bitte warten ..
Mitglied: Komoran12
11.08.2017 um 16:38 Uhr
Sorry - die es gibt 2 .txt Dateien die vorhanden sein sollen, um die Message auszugeben.

1. txt -> convert-18.09.52.txt
2. txt -> complete-18.09.54.txt

Hierbei soll er halt convert und complete nur als variable nehmen.
Bitte warten ..
Mitglied: emeriks
11.08.2017 um 16:44 Uhr
Na dann baue das so ein.
01.
if lcase(left(File.Name,7)) = "convert" and lcase(right(File.Name,4)) = ".txt" then 
Bitte warten ..
Mitglied: Komoran12
11.08.2017 um 16:51 Uhr
Zitat von emeriks:

Na dann baue das so ein.
01.
> if lcase(left(File.Name,7)) = "convert" and lcase(right(File.Name,4)) = ".txt" then 
02.
> 

Ok, vielen Dank. Wie ist es, wenn hier ein "und" habe möchte?

01.
if lcase(left(File.Name,7)) = "convert" and lcase(right(File.Name,4)) = ".txt" and
02.
if lcase(left(File.Name,7)) = "complete" and lcase(right(File.Name,4)) = ".txt"
03.
then 
Bitte warten ..
Mitglied: emeriks
11.08.2017 um 17:14 Uhr
Wieso "und"? "Oder" !
Und ein Bißchen Lesen und learning by doing ist nichts für Dich?
Bitte warten ..
Mitglied: Komoran12
12.08.2017 um 12:23 Uhr
Das mit "or" hatte ich verstanden, aber ich wollte gerne das beides erfüllt sein muss. Daher das "und"
Bitte warten ..
Mitglied: emeriks
LÖSUNG 12.08.2017 um 15:24 Uhr
Achso. die Message soll nur einmal kommen und das nur dann, wenn diese beiden Datein gleichzeitig vorhanden sind?
Nach dann überlege mal selbst ob man das mit der Überprüfung des Namens einer Datei hinbekommen könnte?
Du willst weder
"Wenn jemand anwesend ist, der/die Paul und Tina heißt, dann bitte melden."
noch
"Wenn jemand anwesend ist, der/die Paul oder Tina heißt, dann bitte melden."
sondern
"Wenn jemand anwesend ist, der Paul heißt, und dann noch jemand, die Tina heißt, dann bitte melden."
Du musst also durch den Raum gehen und Dir merken, ob Du Paul oder Tina schon getroffen hast.
01.
dim WshShell : set WshShell = CreateObject("Wscript.Shell")
02.
dim FSO : set FSO = CreateObject("Scripting.FileSystemObject")
03.
dim Path : Path = WshShell.ExpandEnvironmentStrings("%userprofile%") & "\Temp"
04.
dim File, ConvertExist, CompleteExist
05.
ConvertExist = False
06.
CompleteExist = False
07.
for each File in FSO.GetFolder(Path).Files
08.
    if lcase(left(File.Name,7)) = "convert" and lcase(right(File.Name,4)) = ".txt" then
09.
      ConvertExist = True
10.
    end if  
11.
    if lcase(left(File.Name,8)) = "complete" and lcase(right(File.Name,4)) = ".txt" then
12.
      CompleteExist = True
13.
    end if  
14.
    if ConvertExist and CompleteExist then
15.
        msgbox "Konvertierung abgeschlossen!" & vbCrLf & "" & vbCrLf & "Konvertierung abgeschlossen! ",64,"Konvertierung abgeschlossen!"
16.
    exit for
17.
  end if
18.
next
Bitte warten ..
Mitglied: Komoran12
14.08.2017 um 15:03 Uhr
Hallo emeriks, vielen Dank für Deine Hilfe.
Das funktioniert soweit alles sehr gut - danke.

Wenn ich die Dateinamen jetzt anpasse, will es irgendwie nicht funktionieren.

01.
dim WshShell : set WshShell = CreateObject("Wscript.Shell")
02.
dim FSO : set FSO = CreateObject("Scripting.FileSystemObject")
03.
dim Path : Path = WshShell.ExpandEnvironmentStrings("%userprofile%") & "\Temp"
04.
dim File, ConvertExist, CompleteExist
05.
ConvertExist = False
06.
CompleteExist = False
07.
for each File in FSO.GetFolder(Path).Files
08.
    if lcase(left(File.Name,7)) = "convert" and lcase(right(File.Name,4)) = ".txt" then
09.
      ConvertExist = True
10.
    end if  
11.
    if lcase(left(File.Name,8)) = "complete" and lcase(right(File.Name,4)) = ".txt" then
12.
      CompleteExist = True
13.
    end if  
14.
    if ConvertExist and CompleteExist then
15.
        msgbox "Konvertierung abgeschlossen!" & vbCrLf & "" & vbCrLf & "Konvertierung abgeschlossen! ",64,"Konvertierung abgeschlossen!"
16.
    exit for
17.
  end if
18.
next
Ich habe jetzt Zeile 8 mit test1 und Zeile 11 mit test2 bei mir angepasst - allerdings dann funktioniert es nicht.
Bitte warten ..
Mitglied: emeriks
14.08.2017, aktualisiert um 15:17 Uhr
Ja ist logisch.
Hast Du Dir auch nur einmal die Befehle angesehen, was diese machen und warum da welche Parameter stehen? Ein Bißchen Initiative?

lcase
left
right
Bitte warten ..
Mitglied: Komoran12
14.08.2017 um 15:23 Uhr
Ja, das habe ich, aber irgendwie will das nicht so, wie ich es will
Muss ggf. Zeile 9,12,14 ebenfalls angepasst werden?
Bitte warten ..
Mitglied: beidermachtvongreyscull
14.08.2017 um 15:26 Uhr
Hast Du denn den Code zwischen den Zeilen 7 und 14 überhaupt verstanden?
Bitte warten ..
Mitglied: emeriks
LÖSUNG 14.08.2017 um 15:27 Uhr
Ja, das habe ich, aber irgendwie will das nicht so, wie ich es will
Muss ggf. Zeile 9,12,14 ebenfalls angepasst werden?
Ja. Z.B. in 9 könntest Du schreiben "noch trueer"

Mal im Ernst:
Ja, das habe ich
Was machen die von mir fett geschriebenen Funktionen? Wenn Du mir diese Frage beantworten kannst, dann helfe ich weiter.
Bitte warten ..
Mitglied: beidermachtvongreyscull
14.08.2017 um 15:35 Uhr
OK.

Ich bin raus, denn jetzt wird's bescheuert.
Bitte warten ..
Mitglied: Komoran12
17.08.2017 um 17:10 Uhr
Zitat von emeriks:

Ja ist logisch.
Hast Du Dir auch nur einmal die Befehle angesehen, was diese machen und warum da welche Parameter stehen? Ein Bißchen Initiative?

lcase
left
right

Hi emeriks, hat lcase ggf. etwas mit der länge des Wortes zu tun? Irgendwie steige ich da nicht durch, würde es aber gerne wissen.
Bitte warten ..
Mitglied: em-pie
17.08.2017 um 19:43 Uhr
Hast du mal nach den Funktionen
Left()
Right()
Lcase()
UCase()
Im Zusammenhang mit vbs geschaut?

Wenn wenn ja, wirst du obigen Code und deinem String test_.txt verstehen.

Was macht denn ein Right("test_.txt", 4)?
Bitte warten ..
Mitglied: Komoran12
18.08.2017 um 13:10 Uhr
Zitat von em-pie:

Hast du mal nach den Funktionen
Left()
Right()
Lcase()
UCase()
Im Zusammenhang mit vbs geschaut?

Wenn wenn ja, wirst du obigen Code und deinem String test_.txt verstehen.

Was macht denn ein Right("test_.txt", 4)?

Hallo em-pie, ich konnte mich da jetzt endlich einlesen und habe es verstanden...

Wenn ich hier:

01.
if lcase(left(File.Name,7)) = "convert" and lcase(right(File.Name,4)) = ".txt" then 
anstatt convert.txt - test123.txt habe, muss ich es wie folgt anpassen:

01.
if lcase(left(File.Name,8)) = "test1234" and lcase(right(File.Name,4)) = ".txt" then 
Bitte warten ..
Mitglied: emeriks
18.08.2017 um 13:15 Uhr
Geht doch.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Vbs in exist - wenn ein Fenster existiert dann

Frage von pdiddoBatch & Shell2 Kommentare

Hi Leute Ich versuch auf vbs zu realisieren, sobald ein Fenster (Programm was zuvor gestartet wird) existiert, dass eine ...

Batch & Shell

Schleife mit Exist

gelöst Frage von casi4711Batch & Shell18 Kommentare

Hallo an alles fleißigen Scripter, ein Script soll eine Range von IPs abfragen und checken, ob ein bestimmtes Verzeichnis ...

VB for Applications

VBS Datei Auswahl Dialog

gelöst Frage von 133202VB for Applications12 Kommentare

Hallo Ihr, im Thread: konnte ich schon finden, was ich gesucht habe: Jetzt möchte ich allerdings, dass am Anfang ...

VB for Applications

VBS für Timestamp-Datei

gelöst Frage von PascalSchVB for Applications3 Kommentare

Hallo Zusammen, Bin ziemlich neu in der Welt des VBS und habe eine Frage hierzu, die ihr mir hoffentlich ...

Neue Wissensbeiträge
LAN, WAN, Wireless
OPNsense Captive Portal mit vordefnierten Voucher
Tipp von Crusher79 vor 1 TagLAN, WAN, Wireless

Hallo, Ziel war es vorhandene Klienten-Daten (Nummer im System) und Kennwörter anzulegen. Voucher werden durch externes Programm in Papierform ...

Administrator.de Feedback
Entwicklertagebuch: Die nächste Version
Information von admtech vor 2 TagenAdministrator.de Feedback6 Kommentare

Hallo Administrator User, vielleicht haben es einige User schon mitbekommen: Wir arbeiten aktuell an einer komplett neuen Version von ...

Windows Server

Active Directory ESE Version Store Changes in Server 2019

Information von Dani vor 6 TagenWindows Server

Moin, Last month at Microsoft Ignite, many exciting new features rolling out in Server 2019 were talked about. But ...

Exchange Server

Microsoft Extending End of Support for Exchange Server 2010

Information von Dani vor 6 TagenExchange Server5 Kommentare

Moin, After investigating and analyzing the deployment state of an extensive number of Exchange customers we have decided to ...

Heiß diskutierte Inhalte
Router & Routing
Anmeldung am Router von einer ext. IP?
Frage von BigSnakeyeRouter & Routing15 Kommentare

Hallo, ich habe gerade seltsames in meiner Fritzbox entdeckt. Plötzlich war die Verbindung unterbrochen - kein Internet. Also habe ...

Drucker und Scanner
Gerät kann nur auf serielle Drucker drucken! Umleiten an Netzwerkdrucker möglich?
Frage von RG2525Drucker und Scanner13 Kommentare

Hallo, Da ich öfters Festplatten löschen muss, habe ich ein externes HD Dock gekauft, dass HDs selbständig löscht und ...

Router & Routing
Zwei Subnetze - Archer bzw. Fritz.box
Frage von mili988Router & Routing13 Kommentare

Hallo liebe Gemeinde, sorry, denke, die Frage ist sicher x-mal bereits aufgetaucht aber hier noch einmal :-) Ich habe ...

Windows Server
Fehler beim Installieren des RD-Verbindungsbrokers
gelöst Frage von dbox3Windows Server12 Kommentare

Hallo zusammen, ich habe einen Windows Server 2019 als VM auf einem ESXi 6.7 U2 frisch installiert. Mit dem ...