Batch-VBScript混合语音脚本

时间:2014-01-26 20:03:27

标签: batch-file vbscript

这是我的批处理脚本:

@echo off
title 

setlocal enabledelayedexpansion
:a
set /p a=
!d!
for %%G in (%a%) do (set /a b+=1
if !b! neq 1 (set c=!c!-%%G) else (set c=%%G))
echo wscript.createobject("sapi.spvoice").speak "!c!">a.vbs
start a.vbs

exit

每次运行此程序时,它会使用新代码作为变量c覆盖a.vbs文件。是否可以使用“wscript.createobject(”sapi.spvoice“)。说”!c!“”预先存在于VBScript中并且只是批量分配变量并执行它而不是覆盖然后执行?

在aphoria的帮助下,我调整了我的脚本: 的VBScript:

wscript.createobject("sapi.spvoice").speak wscript.arguments(0)

批处理脚本:

@echo off
title 

setlocal enabledelayedexpansion
set /p a=
for %%G in (!a!) do (set /a b+=1
if !b! neq 1 (set c=!c!-%%G) else (set c=%%G))
cscript //nologo b.vbs !c!

exit

4 个答案:

答案 0 :(得分:1)

创建一个脚本文件SpeakNumber.vbs(无论你想要什么,都可以调用它)。

把它放在里面:

Set args = Wscript.Arguments

WScript.CreateObject("sapi.spvoice").Speak args(0)

然后,像这样更改批处理文件:

@echo off
title 

setlocal enabledelayedexpansion
:a
set /p a=
!d!
for %%G in (%a%) do (set /a b+=1
if !b! neq 1 (set c=!c!-%%G) else (set c=%%G))
START SpeakNumber.vbs !c!

exit

答案 1 :(得分:1)

我可以建议你另一个解决方案吗?

JScript语言类似于VBScript,但在这种情况下有一个优势:JScript代码可以通过一个非常简单的技巧放在里面批处理文件本身。这样,就没有必要使用JScript代码创建一个单独的文件:

@if (@CodeSection == @Batch) @then

:: Previous line is:
:: - in Batch: a valid IF command that does nothing
:: - in JScript: a conditional compilation IF statement that is false
::   so the following code is omitted until the next atSign-end

@echo off
title 

setlocal enabledelayedexpansion
set /p a=
for %%G in (!a!) do (set /a b+=1
if !b! neq 1 (set c=!c!-%%G) else (set c=%%G))
rem Execute this Batch file as a JScript one:
cscript //nologo //E:JScript "%~F0" !c!

exit

@end

WScript.CreateObject("sapi.spvoice").Speak(WScript.Arguments(0));

在这种情况下,原始的VBScript代码非常简单,以至于JScript转换是即时的;请注意,JScript中需要大写字母。但是,我并不完全确定spvoice在JScript中的执行方式与在VBScript中的执行方式相同;你必须做一个测试...

答案 2 :(得分:0)

这是我的批处理脚本:

@echo off title setlocal enabledelayedexpansion :a set /p a= !d! 
for %%G in (%a%) 
  do (set /a b+=1 
     if !b! neq 1 
         (set c=!c!-%%G) 
    else 
        (set c=%%G)) 
    echo wscript.createobject("sapi.spvoice").speak "!c!">a.vbs 
    start a.vbs 
exit

答案 3 :(得分:-1)

您没有使用混合,因为您可以将vbs文件嵌入批处理文件中。

@echo off
set /p "Voice= Enter what you would like to say : "
echo dim speechobject >> sapi.vbs
echo set speechobject=createobject("sapi.spvoice") >> sapi.vbs
echo speechobject.speak "%Voice%" >> sapi.vbs
start sapi.vbs
timeout /t 1 /nobreak
del sapi.vbs