Datei nach VBS Skript Ausführung öffnen?

1 Antwort

VBS ist eine tote Sprache. diese wird nur noch genutzt/unterstützt, weil es massenhaft alte Scripte gibt!

Desse ungeachtet kannst Du natürlich folgende Batch schreiben.

talk.cmd

@echo off
  rem schreibe  Script
echo set oVoice=createobject("sapi.spvoice") >"talk.vbs"
echo oVoice.speak("Hallo wie gehts") >>"talk.vbs"
cscript //nologo "talk.vbs"

  rem nächster  Satz
echo set oVoice=createobject("sapi.spvoice") >"talk.vbs"
echo oVoice.speak("ich bin die Stimme") >>"talk.vbs"
cscript //nologo "talk.vbs"

pause

..gruselig... und sperrig

Natürlich könnte man auch die Texte über Argumente an ein VBS übergeben, was jedoch die Orgie mit der Zeilenweisen Ausgabe nur verlagert, da dann ein gutes Dutzend Zeilen für das VBS nötig sind.

Ich schreibe keine Demo dazu... lassen wir VBS in frieden sterben.

JavaScript kann mehere Befehle in einer Zeil ausführen (Befehl;Befehl;Befehl;Befehl;). Aus der Batch muss nachwievor ein HilfsScript gespeichert werden. Allerding erledigt dies eine einzelne Zeile mit mehreren Befehlen.

Dieses HilfsScript wird auch mit cscript ausgeführt aber (wie oben angekündigt) übergeben wir das was verarbeitet werden soll als Argumente an as Script

cscript //nologo "meinJavaScript.js" Argument argument usw

Die folgende Batch demonstriert noch weitere Verbesserungen, wie das verpacken obigen cscript-Aufrufs in ein Macro und die Einstellung der Sprachgeschwindigkeit/Lautstärke, Nutzung von Umlauten in Texten beim erzeugen des JavaScripts.

talkDemo2.cmd

@echo off
  rem Umlaute erlauben
chcp 65001>nul
  rem pfad  zur Scriptdatei festlegen (Tempordner ist immer  der beste Platz)
set "sayJS=%temp%\say.js"


  rem sprachgeschwindigkeit  einstellen (Werte von -10 bis 7  sind  einigermaßen Sinnvoll)
set "Speed=-2"
  rem lautstärke (0..100) (relativ  zu den globalen  Lautstärkeeinstellungen des Systems)
set "Volume=100" 
  rem das LaberScript in den tempordner schreiben
echo s=new ActiveXObject('SAPI.SpVoice');s.Rate=%Speed%;s.Volume=%Volume%;a=' ';for (i=0;i^<WScript.Arguments.length;i++){a+=WScript.Arguments(i)+' '};s.Speak(a,0)>"%sayJS%"
  rem Aufrufmakro (es  wäre doch blöd  jedesmal die ganze Befehlszeile von Cscript zu schreiben)
  rem Achtung am Ende der folgenden  zile befindet sich ein Leerzeichen! (nicht  vergessen, dieses  ist unsichtbar!)
set talk=cscript //nologo "%sayJS%" 

  rem einfach zur Demo Text variablen festlegen
set "Text1=ich labere
set "Text2=was das Zeug herhält..."


  rem Makro aufrufen
%talk% Ich bin die Stimme
  rem ... oder
%talk% "Halöchen Herr und Meister"
  rem oder auch 
%talk% %text1% %text2%
%talk% "wollen wir spielen"
  rem  würfle eine Zahl
set /a "wurf=%random% %% 6 +1"
%talk% "ich habe eine %wurf% gewürfelt"

pause

Hier noch mal das JavaScript Zeilenweise und mit ordentlichen Variablennamen+ Kommentaren aufgelöst:

say.js (nur zur Anschauung)

  //ObjectInstanz erzeugen
SpeakObject=new ActiveXObject('SAPI.SpVoice');
  //Einstellen von Sprachgeschwindigkeit und Lautstärke
SpeakObject.Rate=-2;
SpeakObject.Volume=100;
  //globale Variable, welche alle übergebenen argumente vereint
Args='';
  //...alle Argumente durch ein Leerzeichen  getrennt  zum String Args hinzufügen
for (i=0; i<WScript.Arguments.length; i++){
    Args+=WScript.Arguments(i)+' ';
};
  //String Args aussprechen
SpeakObject.Speak(Args,0)
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
xxxKingtv 
Fragesteller
 27.10.2020, 14:28

Danke für die ausführliche Antwort

0