这是我的批处理脚本:
@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
答案 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