Frage von Proximus553, 42

Was mache ich bei dieser Codezusammensetzung falsch?

set /p "ENT=sentence: "
if %ENT% EQU EXIT goto end
echo text = "%ENT%" >>speak.vbs
echo set objvoice=createobject("SAPI.spvoice") >>speak.vbs
echo objvoice.speak text >>speak.vbs
speak.vbs

Bei einem der letzten 4 Befehle bricht cmd.exe das ganze ab mit der Begründung, dass das zweite Wort von ENT (bzw. dessen Inhalt) nicht syntaktisch verarbeitet werden kann.

Danke für eure Hilfe :)

Antwort
von MarkusGenervt, 18

EXIT ist ein Befehl und wird ohne Anführungszeichen auch als Befehl interpretiert.

Im übrigen solltest Du den If-Schalter /i hinzufügen , um im Vergleich die GROSS/klein-Schreibung zu ignorieren.

Außerdem kannst Du mit der Sprungmarke ":eof" (= end of file) die Verarbeitung der Batch abbrechen, ohne eine explizite Sprungmarke setzen zu müssen. ":eof" selbst muss dabei nicht gesetzt werden.

Zusätzlich ist es sinnvoller für einen Zeichenvergleich auch das Gleichheitszeichen zu benutzen.

if /i "%ENT%" == "EXIT" goto :eof


Kommentar von Proximus553 ,

Danke aber am EXIT lag's nicht, ebenso wenig wie am if /i oder dem eof, das war beabsichtigt da bei end noch andere befehle ausgeführt werden, hast du noch ne Idee bezüglich dem Inhalt?

Kommentar von MarkusGenervt ,

Hast Du es mal mit Anführungszeichen und == (also ohne EQU) versucht?

EQU & Co. werten Integer aus. d.h. dass die Operanden in Integer umgewandelt und verglichen werden.

/i und :eof war nur ein Tipp

"SAPI.spvoice" kann ich leider nichts zu sagen. Mit dem Modul hatte ich bisher nichts zu tun.


Kommentar von MarkusGenervt ,

Noch ein Tipp:
Ich finde diese VBS-Erstellung mit Batch immer sehr "unelegant". Schreib doch ein VBS-Skript, welches per Parameter einen Job erledigt. Dann ist es wieder benutzbar und der Batch-Code reduziert sich erheblich.

z.B.:

set objvoice=createobject("SAPI.spvoice")
With WScript.Arguments.Unnamed
For ID = 0 To .Count
objvoice.speak .Item(ID)
'hier evtl. Pause bis Rückmeldung "Fertig"
Next
End With
wscript speak.vbs "%ENT%"
Antwort
von Proximus553, 4

HAB DIE LÖSUNG BZW. DEN FEHLER GEFUNDEN, VIELEN DANK AN ALLE  :)

Keine passende Antwort gefunden?

Fragen Sie die Community