Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 混合批处理VBS TTS脚本不工作_Batch File_Vbscript_Text To Speech - Fatal编程技术网

Batch file 混合批处理VBS TTS脚本不工作

Batch file 混合批处理VBS TTS脚本不工作,batch-file,vbscript,text-to-speech,Batch File,Vbscript,Text To Speech,我尝试用我已经制作的VBS脚本制作混合批处理VBS脚本。它将给出一个输入框,并将结果用于sapi.spvoice.Speak它。我试图将其制作成一个批处理脚本(如下所示),但它不起作用,tts.vbs最终只包含 sapi.Speak消息 批处理脚本: @echo off :start cls echo Batch Text-To-Speech echo By SudDaBuilder :: echo Fixed by %YourNameHere% :: set /p msg=What do y

我尝试用我已经制作的VBS脚本制作混合批处理VBS脚本。它将给出一个
输入框
,并将结果用于
sapi.spvoice.Speak
它。我试图将其制作成一个批处理脚本(如下所示),但它不起作用,tts.vbs最终只包含
sapi.Speak消息


批处理脚本:

@echo off
:start
cls
echo Batch Text-To-Speech
echo By SudDaBuilder
:: echo Fixed by %YourNameHere% ::
set /p msg=What do you want your PC to say? 
set /p vce=Choose a Voice (0 - Male, 1 - Female) 
pause
cls
echo Dim message, sapi, voice > tts.vbs
echo message=%msg% > tts.vbs
echo voice=%vce% > tts.vbs
echo Set sapi=CreateObject("sapi.spvoice") > tts.vbs
echo with sapi > tts.vbs
echo Set .voice = .getvoices.item(voice) > tts.vbs
echo .Volume = 100 > tts.vbs
echo end with > tts.vbs
echo sapi.Speak message > tts.vbs
cscript tts.vbs
cls
pause

:again
cls
set /p retry=Again? (y/n) 
if %retry% == y goto start
goto end

:end
echo See you soon!
ping localhost > nul
“>`需要从第十二行开始变为“>>”。 为什么?
字符覆盖文件的内容并添加指定的内容,因此您只能得到最后一行。鉴于,
>
字符添加到文件内容末尾的指定行上。
您还需要在引号中包含
msg
vce
变量


固定脚本:

@echo off
:start
cls
echo Batch Text-To-Speech
echo By SudDaBuilder
:: echo Fixed by SO Suda ::
set /p msg=What do you want your PC to say? 
set /p vce=Choose a Voice (0 - Male, 1 - Female) 
pause
cls
echo Dim message, sapi, voice > tts.vbs
:: THIS IS THE TWELFTH LINE ::
echo message="%msg%" >> tts.vbs
echo voice="%vce%" >> tts.vbs
echo Set sapi=CreateObject("sapi.spvoice") >> tts.vbs
echo with sapi >> tts.vbs
echo Set .voice = .getvoices.item(voice) >> tts.vbs
echo .Volume = 100 >> tts.vbs
echo end with >> tts.vbs
echo sapi.Speak message >> tts.vbs
cscript //NoLogo tts.vbs
cls
pause

:again
cls
:: ADDED A DELETE FOR THE tts.vbs FILE::
del tts.vbs
set /p retry=Again? (y/n) 
if %retry% == y goto start
goto end

:end
echo See you soon!
ping localhost >> nul
“>`需要从第十二行开始变为“>>”。 为什么?
字符覆盖文件的内容并添加指定的内容,因此您只能得到最后一行。鉴于,
>
字符添加到文件内容末尾的指定行上。
您还需要在引号中包含
msg
vce
变量


固定脚本:

@echo off
:start
cls
echo Batch Text-To-Speech
echo By SudDaBuilder
:: echo Fixed by SO Suda ::
set /p msg=What do you want your PC to say? 
set /p vce=Choose a Voice (0 - Male, 1 - Female) 
pause
cls
echo Dim message, sapi, voice > tts.vbs
:: THIS IS THE TWELFTH LINE ::
echo message="%msg%" >> tts.vbs
echo voice="%vce%" >> tts.vbs
echo Set sapi=CreateObject("sapi.spvoice") >> tts.vbs
echo with sapi >> tts.vbs
echo Set .voice = .getvoices.item(voice) >> tts.vbs
echo .Volume = 100 >> tts.vbs
echo end with >> tts.vbs
echo sapi.Speak message >> tts.vbs
cscript //NoLogo tts.vbs
cls
pause

:again
cls
:: ADDED A DELETE FOR THE tts.vbs FILE::
del tts.vbs
set /p retry=Again? (y/n) 
if %retry% == y goto start
goto end

:end
echo See you soon!
ping localhost >> nul

只需将回音包含在一个(代码块)中,该代码块被重定向到一个文件。
这样代码就更容易阅读了。
要避免过早结束代码块,
内部的右括号必须用插入符号转义
^)

real混合文件仅由一个文件组成。
这也是可能的,但需要通过cmd行参数处理参数。

只需将回音包含在一个(代码块)中,然后重定向到文件。
这样代码就更容易阅读了。
要避免过早结束代码块,
内部的右括号必须用插入符号转义
^)

real混合文件仅由一个文件组成。 这也是可能的,但需要通过cmd行参数处理参数。

您可以使用临时文件嵌入。这将提高脚本的速度,因为不会有冗余IO操作:

<!-- : BATCH
    @echo off
    :start
    cls
    echo Batch Text-To-Speech
    echo By SudDaBuilder
    :: echo Fixed by %YourNameHere% ::
    set /p msg=What do you want your PC to say? 
    set /p vce=Choose a Voice (0 - Male, 1 - Female) 

    pause

    cscript //nologo "%~f0?.wsf" %msg% %vce%

    :again
    cls
    set /p retry=Again? (y/n) 
    if %retry% == y goto start
    goto end

    :end
    echo See you soon!
    ping localhost > nul
    exit /b %errorlevel%



BATCH : --->

<job><script language="VBScript">

Dim message, voice

message=WScript.Arguments.Item(0)
voice=WScript.Arguments.Item(1)

'WScript.Echo(voice & "--" & message) 

set sapi = CreateObject("SAPI.SpVoice") 
with sapi 
 Set .voice = .getvoices.item(voice) 
  '.Volume = 100
end with

sapi.Speak( message)

 </script></job>
可以使用临时文件嵌入。这将提高脚本的速度,因为不会有冗余IO操作:

<!-- : BATCH
    @echo off
    :start
    cls
    echo Batch Text-To-Speech
    echo By SudDaBuilder
    :: echo Fixed by %YourNameHere% ::
    set /p msg=What do you want your PC to say? 
    set /p vce=Choose a Voice (0 - Male, 1 - Female) 

    pause

    cscript //nologo "%~f0?.wsf" %msg% %vce%

    :again
    cls
    set /p retry=Again? (y/n) 
    if %retry% == y goto start
    goto end

    :end
    echo See you soon!
    ping localhost > nul
    exit /b %errorlevel%



BATCH : --->

<job><script language="VBScript">

Dim message, voice

message=WScript.Arguments.Item(0)
voice=WScript.Arguments.Item(1)

'WScript.Echo(voice & "--" & message) 

set sapi = CreateObject("SAPI.SpVoice") 
with sapi 
 Set .voice = .getvoices.item(voice) 
  '.Volume = 100
end with

sapi.Speak( message)

 </script></job>

我认为颠倒论点或引用文本说话会更好,否则论点计数不清楚。那么这个文件的扩展名是什么。hta?@SudDaBuilder-这两个代码段都应该放在扩展名为
.bat
的文件中。我认为反转参数或引用文本会更好,否则参数计数不清楚。那么这个文件的扩展名是什么。hta?@SudDaBuilder-这两个代码段应放在扩展名为
.bat
的文件中。