If exist - if not exist in .vbs - Datei
Moin, moin,
vielleicht hat jemand ja einen Tipp für mich. Mit nachfolgender .vbs lasse ich mir einen Messagebox ausgeben:
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:
Allerdings funktioniert das leider nicht! Hat jemand eine Idee, dass anders zu lösen?
Beste Grüße!
vielleicht hat jemand ja einen Tipp für mich. Mit nachfolgender .vbs lasse ich mir einen Messagebox ausgeben:
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:
set quelle=%userprofile%\Temp\*.txt
if exist "%quelle%" goto :test
if not exist ""%quelle%"" goto :EOF
:test
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!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 346063
Url: https://administrator.de/contentid/346063
Ausgedruckt am: 23.11.2024 um 13:11 Uhr
24 Kommentare
Neuester Kommentar
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
E.
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
dim WshShell : set WshShell = CreateObject("Wscript.Shell")
dim FSO : set FSO = CreateObject("Scripting.FileSystemObject")
dim Path : Path = WshShell.ExpandEnvironmentStrings("%userprofile%") & "\Temp"
dim File
for each File in FSO.GetFolder(Path).Files
if lcase(right(File.Name,4)) = ".txt" then
msgbox "Konvertierung abgeschlossen!" & vbCrLf & "" & vbCrLf & "Konvertierung abgeschlossen! ",64,"Konvertierung abgeschlossen!"
exit for
end if
next
E.
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:
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!
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:
'Deklarieren
DIM strVar
'Zuweisen
strVar = "Meine Variable"
'Verwenden:
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 &
€dit2: Gestrichenes erklärt sich unten!
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...
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.
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.
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.
dim WshShell : set WshShell = CreateObject("Wscript.Shell")
dim FSO : set FSO = CreateObject("Scripting.FileSystemObject")
dim Path : Path = WshShell.ExpandEnvironmentStrings("%userprofile%") & "\Temp"
dim File, ConvertExist, CompleteExist
ConvertExist = False
CompleteExist = False
for each File in FSO.GetFolder(Path).Files
if lcase(left(File.Name,7)) = "convert" and lcase(right(File.Name,4)) = ".txt" then
ConvertExist = True
end if
if lcase(left(File.Name,8)) = "complete" and lcase(right(File.Name,4)) = ".txt" then
CompleteExist = True
end if
if ConvertExist and CompleteExist then
msgbox "Konvertierung abgeschlossen!" & vbCrLf & "" & vbCrLf & "Konvertierung abgeschlossen! ",64,"Konvertierung abgeschlossen!"
exit for
end if
next
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"Muss ggf. Zeile 9,12,14 ebenfalls angepasst werden?
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.