我有一个问题,关于一个我花了至少一个小时才弄清楚的事情。我有一个批处理文件,它创建了一个小型 VBS 脚本,这样我就可以做一些复杂的计算(至少是一些命令提示符无法执行的计算)。代码非常简单
set /p APERTURE=Please enter f/stop aperture:
(
echo Wscript.Echo "Calculated APEX Value: ",round^(^(log^(%APERTURE%^)*^(2.0/log^(2.0^)^)*62500^)^),"/62500"
) >%temp%\calculate.vbs
cscript //nologo %temp%\calculate.vbs
但有一个小问题让我很烦恼。结果显示为
Calculated APEX Value: 432429 /62500
当我真正想让它显示为
Calculated APEX Value: 432429/62500
注意数字之间的空格。
该脚本在最新版本的 Windows 10(昨晚升级)上运行。
谢谢
答案1
问题在于 wScript.echo 参数的使用。只要您使用多个参数,它就会在每个结果之间添加空格。您需要删除这些空格并将所有内容放在第一个参数中。通过将 , 更改为 &(由于使用 cmd 而需要转义),所有内容都变成一个参数,空格就消失了。
脚本变成如下形式:
set /p APERTURE=Please enter f/stop aperture:
(
echo Wscript.Echo "Calculated APEX Value: "^&round^(log^(%APERTURE%^)*^(2.0/log^(2.0^)^)*62500^)^&"/62500"
) >%temp%\calculate.vbs
cscript //nologo %temp%\calculate.vbs
答案2
考虑到评论交换,为了让您了解 powershell 是多么简单和强大,这里是用 powershell 编写的脚本:
$aperture = read-host -Prompt "Please enter f/stop aperture"
$APEX = [math]::Round([math]::log($aperture)*(2/[math]::log(2))*62500)
$return = "Calculated APEX Value: $APEX/62500"
set-clipboard -Value $return
write-host $return
答案3
- 仅一些建议...
删除所有转义^
替换echo
为set /p
使用一个label
来:loop
测试findstr regex
输入/数字
替换并//nologo
获取| find "string"
时间删除您的file.vbs
运行后
@echo off
:loop
set APERTURE=<nul & <con: set /p APERTURE=Please enter f/stop aperture:
<con: call echo\%APERTURE%|findstr [0-9] >nul || cls && echo\ && goto=:loop
>"%temp%\calculate.vbs" <nul set /p "'=Wscript.Echo "Calculated APEX Value: "&round((log(%APERTURE%)*(2.0/log(2.0))*62500))&"/62500""
cscript "%temp%\calculate.vbs" | find "APEX" & 2>nul del /q /f "%temp%\calculate.vbs