批处理文件如何在 vbscript 中不打印最后的空格

批处理文件如何在 vbscript 中不打印最后的空格

我有一个问题,关于一个我花了至少一个小时才弄清楚的事情。我有一个批处理文件,它创建了一个小型 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

  • 仅一些建议...

删除所有转义^替换echoset /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

相关内容