Ist es möglich, ein VBScript zu erstellen, das ein Batch-Skript in sich selbst ausführt?

1

Ich weiß, dass es seltsam klingt, aber meine Idee ist es, eine einzelne Textdatei zu erstellen, die ein VBScript und ein Batch-Skript enthält. Wenn ich dieses Skript als VBScript ausführe, ruft es sich selbst als Batch-Skript auf und dieses Batch-Skript führt einige Aktionen aus cmd.exe Aufgaben.

Ich weiß, dass Sie die .ShellExecute-Methode verwenden und dann mit CMD / C mehrere [...] Kommandos ausführen können, aber dies ist etwas schwierig zu lesen.

Mein Versuch war:

If False Then
  goto batchLines
End If
[...VBScript continues here...]
Wscript.Quit
:batchLines
[...batch Script starts here...]

Aber wie zu erwarten, hat es überhaupt nicht funktioniert.

Pablo
quelle
Wenn dies der Fall wäre, wäre es möglicherweise schwieriger, als wie die Shell-Ausführung mit cmd / c aussieht. Möglicherweise ist es möglich, Zeichenfolgen über mehrere Zeilen zu verteilen und anschließend die Shell auszuführen cmd /c stroder eine Zeichenfolge zu erstellen, aus der ein Batch-Skript besteht. Schreiben Sie sie in eine temporäre Fledermausdatei kopieren und dann cmd / c batchscript mit der Shell ausführen. Es ist nicht das, wonach Sie genau fragen, aber es ist nur eine andere Möglichkeit, den Stapel und das VBScript zu erhalten
Barlop
Dies kann leicht in umgekehrter Richtung erfolgen. Siehe stackoverflow.com/q/9074476/1012053 - Achten Sie insbesondere auf die WSF-Lösung. Vielleicht können Sie das auf den Kopf stellen, damit sich der VBS als Batch-Skript aufruft, aber das Skript muss die Erweiterung .BAT (oder .CMD) haben, wenn es als Batch ausgeführt werden soll. Das heißt, Sie müssen den VBS mit CSCRIPT mit der //E:VBSOption aufrufen .
Dbenham
Hier ist ein hybrides jscript / batch, das von dbenham / dave benham geschrieben wurde. jrepl.bat dostips.com/forum/viewtopic.php?f=3&t=6044
Barlop

Antworten:

-1

Das Gegenteil ist möglich (Erstellen eines Stapels, auf dem ein VB-Skript ausgeführt wird). Dies ist ein Beispiel.

@set @junk=1 /*
@echo off
REM Add Batch Stuff Here
if "%1" == "MOARBATCH" goto :MOARBATCH
cscript //nologo //E:jscript %~f0 %*
goto :eof */
// Add VBS stuff here
Wscript.Quit
/*
:MOARBATCH
REM More Batch Stuff Here
REM */

Sie können verrückt werden, aber AFAIK Sie müssen mit einer Batch-Datei beginnen, um die Vorteile der Batch-Datei zu nutzen, die diese Macken verwendet. Übrigens wird dies oft als Hybrid-Batch-Datei bezeichnet.

krowe
quelle
Dankeschön. Ich wollte ein solches Skript erstellen, weil ich einen Stapel ausführen musste, der höhere Berechtigungen anforderte (als Administrator ausführen). Könnte das vbScript also höhere Berechtigungen anfordern und dann "Konsolenbefehle" ausführen (ohne ein neues Konsolenfenster zu öffnen)?
Pablo
1
Übrigens ist mir aufgefallen, dass Sie Jscript und auch eine Funktion dieser Sprache verwenden (mehrzeiliger Kommentar), sodass dieses Skript anscheinend nur in Javascript geschrieben werden sollte.
Pablo
VBScript-Hybrid-Batch-Dateien sind möglich, aber noch hackiger. Wenn überhaupt möglich, würde ich mit JScript gehen. Möglicherweise bevorzugen Sie die Verwendung einer All-Batch-Lösung. Ich wollte eine für Sie schreiben, als ich eine gefunden habe, die bereits erstellt wurde: stackoverflow.com/a/28467343/932549
krowe
Funktioniert das überhaupt mit VBScript, da es die JScript-Engine aufruft?
NetMage