VB Skript für mehrere Batch Befehle
Hallo,
zum Glück konntet Ihr mir schon sehr helfen, habe nun noch eine weitere Frage.
Ich nutze derzeit ein VB Skript um mehrere Batch Dateien hintereinander zu starten:
Gibt es hier die Möglichkeit anstelle der Angabe der Skriptdatei die einzelnen
Batchfehle einzutragen, damit man nur eine Datei, und zwar das VB Skript, mit dem ich die einzelnen Batch starte,
öffnen muss?
Beste Grüße,
freshman2017
zum Glück konntet Ihr mir schon sehr helfen, habe nun noch eine weitere Frage.
Ich nutze derzeit ein VB Skript um mehrere Batch Dateien hintereinander zu starten:
Set WshShell = CreateObject("Wscript.Shell")
WshShell.Run "%userprofile%\Desktop\TEST\Skripte\1.bat", 0, True
WshShell.Run "%userprofile%\Desktop\TEST\Skripte\2.bat", 0, True
WshShell.Run "%userprofile%\Desktop\TEST\Skripte\3.bat", 0, True
WshShell.Run "%userprofile%\Desktop\TEST\Skripte\4.bat", 0, True
WshShell.Run "%userprofile%\Desktop\TEST\Skripte\5.bat", 0, True
WshShell.Run "%userprofile%\Desktop\TEST\Skripte\6.bat", 0, True
Set WshShell = Nothing
Gibt es hier die Möglichkeit anstelle der Angabe der Skriptdatei die einzelnen
Batchfehle einzutragen, damit man nur eine Datei, und zwar das VB Skript, mit dem ich die einzelnen Batch starte,
öffnen muss?
Beste Grüße,
freshman2017
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 335474
Url: https://administrator.de/forum/vb-skript-fuer-mehrere-batch-befehle-335474.html
Ausgedruckt am: 05.04.2025 um 18:04 Uhr
37 Kommentare
Neuester Kommentar

WshShell.Run "cmd /c BLABLABEFEHL", 0, True
BLABLABEFEHL wird dann aber im Kommandozeilenkontext ausgeführt. Da gibt es einiges zu beachten und ohne den Inhalt der derzeitigen Batchdateien zu kennen lass ich mich nicht zu einem Statement hinreißen.
Ich sehe das eher als Designproblem. Statt Konsolefenster verbergen zu wollen, sollte man lieber prüfen was gleich mit VBScript abgefackelt werden kann.
Grüße
rubberman
Ich sehe das eher als Designproblem. Statt Konsolefenster verbergen zu wollen, sollte man lieber prüfen was gleich mit VBScript abgefackelt werden kann.
Grüße
rubberman

Zitat von @rubberman:
BLABLABEFEHL wird dann aber im Kommandozeilenkontext ausgeführt. Da gibt es einiges zu beachten
Logisch, wie bei allem sollte man sich vorher informieren BLABLABEFEHL wird dann aber im Kommandozeilenkontext ausgeführt. Da gibt es einiges zu beachten
cmd /?
Ich sehe das eher als Designproblem. Statt Konsolefenster verbergen zu wollen, sollte man lieber prüfen was gleich mit VBScript abgefackelt werden kann.
Würde ich auch sagen, da fehlt dann einfach oft noch das Wissen was nativ vielfach einfacher geht.
Zitat von @SlainteMhath:

Ganz unsichtbar ist das dann beim Start aber auch nicht :-P, da musst du es per VBS(shell.run) oder sonstigem Wrapper kapseln.... wo wir aber wieder beim Konsolefenster wären ..
> powreshell.exe -windowstyle hidden the_script.ps1
>
Ich bin mir nicht ganz sicher was du meinst. Kann es sein, dass du alle CMDs in einem Ordner aufrufen willst ohne die Datei angeben zu wollen?
Da ginge das:
Da ginge das:
Dim objShell : Set objShell = CreateObject("Wscript.Shell")
Dim objFso : Set objFso = CreateObject("Scripting.FileSystemObject")
Set folder = objFso.GetFolder("myFilderPath")
For Each item In folder.Files
If(InStr(1, item.Name, ".bat", 1)) Then
' objShell.run "cmd /c " & chr(34) & item & chr(34), 0, true
WScript.Echo item.Name
End If
Next
Eine Möglichkeit wäre, die Batch-Dateien aus dem Skript heraus temporär zu erzeugen, auszuführen und anschließend wieder zu löschen.
In etwa so:
In etwa so:
Dim WshShell : Set WshShell = CreateObject("Wscript.Shell")
Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
'temporäre Batch-Datei erzeugen
Dim Batch1 : Batch1 = FSO.GetTempName & ".cmd"
With FSO.CreateTextFile(Batch1, True)
.WriteLine "Batch 1 - Zeile 1"
.WriteLine "Batch 1 - Zeile 2"
.WriteLine .......
.Close
End With
'temporäre Batch-Datei ausführen, auf Ende warten
WshShell.Run Batch1, 0, True
'temporäre Batch-Datei löschen
FSO.DeleteFile Batch1, True
Analog?
Wobei sich die Frage stellt, warum überhaupt mehrere Batch-Dateien und nicht alles in einer. Aber das kannst nur Du beantworten.
Dim WshShell : Set WshShell = CreateObject("Wscript.Shell")
Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
'temporäre Batch-Datein erzeugen
Dim Batch1 : Batch1 = FSO.GetTempName & ".cmd"
Dim Batch2 : Batch2 = FSO.GetTempName & ".cmd"
With FSO.CreateTextFile(Batch1, True)
.WriteLine "Batch 1 - Zeile 1"
.WriteLine "Batch 1 - Zeile 2"
.WriteLine .......
.Close
End With
With FSO.CreateTextFile(Batch2, True)
.WriteLine "Batch 2 - Zeile 1"
.WriteLine "Batch 2 - Zeile 2"
.WriteLine .......
.Close
End With
'temporäre Batch-Datei ausführen, auf Ende warten
WshShell.Run Batch1, 0, True
WshShell.Run Batch2, 0, True
'temporäre Batch-Datei löschen
FSO.DeleteFile Batch1, True
FSO.DeleteFile Batch2, True

Zeile 12 fehlen zwei zusätzliche Anführungszeichen. Wenn du "Anführungszeichen(")" in einem VBS-String verwendest müssen die immer verdoppelt werden:
und hier Zeile 14 ebenfalls:
.WriteLine "FOR /f ""delims="" %%i IN ('FINDSTR . %quelle%') DO ("
.WriteLine "SET ganze_zeile=!ganze_zeile:""=!"

Zitat von @freshman2017:
Es war tatsächlich ein Copy&Paste Fehler. - derzeit versuche ich noch einzubauen, dass er die "Batch - Temps" in einem anderen Ordner erstellt, als in dem, wo die VBA Datei liegt.
Es war tatsächlich ein Copy&Paste Fehler. - derzeit versuche ich noch einzubauen, dass er die "Batch - Temps" in einem anderen Ordner erstellt, als in dem, wo die VBA Datei liegt.
Batch1 = WshShell.ExpandEnvironmentStrings("%temp%") & "\" & FSO.GetTempName & ".cmd"

Wenn ich es richtig sehe, muss der obere Code ab Zeile 4 eingefügt werden?
Richtig.Was macht wohl
WshShell.ExpandEnvironmentStrings("%temp%")
?Genau: Es holt sich den Temp-Ordner aus der Umgebungsvariable von Windows, und kombiniert mit dem temporären Dateinamen ergibt das dann einen kompletten Pfad zu einer cmd im Temp-Ordner.
Ab und zu die Doku studieren würde dir um ein vielfaches helfen und du müsstest nicht immer den armen Schlauch immer dafür verantwortlich machen, der kann nun wirklich nichts dafür
http://www.robvanderwoude.com/vbstech_data_environment.php

Zitat von @freshman2017:
Naja password, ich wollte die Temp Dateien in einen anderen Ordner schreiben, also bpws. unter: %userprofile%\Desktop\Test\Temp\
oder %userprofile%\Desktop\Test\dev\...
Dann geb ihn doch einfach stattdessen an ?????Naja password, ich wollte die Temp Dateien in einen anderen Ordner schreiben, also bpws. unter: %userprofile%\Desktop\Test\Temp\
oder %userprofile%\Desktop\Test\dev\...
Batch1 = WshShell.ExpandEnvironmentStrings("%userprofile%") & "\Desktop\Test\Temp\" & FSO.GetTempName & ".cmd"
Naja password, ich wollte die Temp Dateien in einen anderen Ordner schreiben, also bpws. unter: %userprofile%\Desktop\Test\Temp\
oder %userprofile%\Desktop\Test\dev\...
Na, dann mach es doch!oder %userprofile%\Desktop\Test\dev\...
Dim Batch1 : Batch1 = WshShell.ExpandEnvironmentStrings("%temp%") & "\" & FSO.GetTempName & ".cmd"
Wieso willst du die denn jedes mal neu anlegen?
Grüße
rubberman
Option Explicit
Dim objFSO, strStart
Const logFile = "my.log"
Const forAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
strStart = FormatDateTime(Now, vbGeneralDate)
' irgendwas ...
WScript.Sleep 2000
With objFSO.OpenTextFile(logFile, forAppending, True)
.WriteLine "Start: " & strStart & vbNewLine & "Ende: " & FormatDateTime(Now, vbGeneralDate) & vbNewLine & "~~~~~~~~~~~~~~~~~"
.Close
End With
rubberman
Hatte gerade mal getetestet, aber das funktioniert noch nicht so. Siehst Du woran es liegt?
Na klar, weil Du es noch nicht soweit verstanden hast, dass Du beim Zusammenkopieren der Zeilen erkennen könntest, was Du anpassen musst ...Dim Batch1 : Batch1 = WshShell.ExpandEnvironmentStrings("%temp%") & "\" & FSO.GetTempName & ".cmd"
temp = objShell.ExpandEnvironmentStrings("%userprofile%") & "\Desktop\Test\Temp"
Fällt Dir da irgendwas auf?temp = objShell.ExpandEnvironmentStrings("%userprofile%") & "\Desktop\Test\Temp"
Und "Batch1" und "temp" sehen auch irgendwie anders aus.
E:
Und %TEMP% ist eine Umgebungsvariable und nicht etwa eine im VBscript.
Dim Batch1 : Batch1 = WshShell.ExpandEnvironmentStrings("%userprofile%") & "\Desktop\Test\Temp\" & FSO.GetTempName & ".cmd"
Dim Batch1 : Batch1 = WshShell.ExpandEnvironmentStrings("%userprofile%") & "\Desktop\Test\Temp\Batch1.cmd"
Beachte, dass der Pfad "%userprofile%\Desktop\Test\Temp" bereits existieren muss. Oder Du erstellst ihn im Script.