【问题标题】:Batch- do more advanced calculations批处理 - 进行更高级的计算
【发布时间】:2013-06-18 14:33:44
【问题描述】:

在批处理中,我无法使用set /a 进行更高级的计算。小数不起作用;例如set /a 5/2 只输出2 而不是2.5。批处理也无法处理大型计算。有没有办法只制作一个临时文件(如 vbs)或调用另一个程序(如计算器)进行计算并将其返回到批处理文件?

【问题讨论】:

标签: batch-file calculator temporary-files running-other-programs


【解决方案1】:

下面的程序是一个 Batch-JScript 混合脚本的例子,它允许评估任何 JScript 表达式:

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

@echo off

rem Define an auxiliary variable to call JScript
set JScall=Cscript //nologo //E:JScript "%~F0"

for /F %%p in ('%JScall% Math.PI') do echo Intrinsic value of PI= %%p
for /F %%P in ('%JScall% 4*Math.atan(1^)') do echo Calculated value of PI= %%P
for /F %%S in ('%JScall% Math.sqrt(2^)') do echo Square Root of 2 = %%S
for /F %%t in ('%JScall% 1/3') do set oneThird=%%t
echo One third = %oneThird%
for /F %%o in ('%JScall% %oneThird%*3') do echo One third times 3 = %%o

goto :EOF

@end

// JScript section

WScript.Echo(eval(WScript.Arguments.Unnamed.Item(0)));

输出:

Intrinsic value of PI = 3.14159265358979
Calculated value of PI= 3.14159265358979
Square Root of 2 = 1.4142135623731
One third = 0.333333333333333
One third times 3 = 0.999999999999999

您可以查看可用的 JScript 算术函数:http://msdn.microsoft.com/en-us/library/b272f386(v=vs.84).aspx

此方法允许将 JScript 代码保留在同一个 .BAT 文件中,并且比 VBScript 代码更简单、更快。

【讨论】:

    【解决方案2】:

    您可以在批处理文件中使用 Windows Scripting Host 的 VBS 脚本,或者我猜想 Powershell 是否具有更好的数学能力。

    我从一个 usenet 帖子中改编了这个,下面的批处理文件显示了一些示例。
    你可以用它来做一些数学运算。

    ::vbs.bat
    @echo off
    >"%temp%\VBS.vbs" echo Set fso = CreateObject("Scripting.FileSystemObject") : Wscript.echo (%*)
    cscript /nologo "%temp%\VBS.vbs"
    del "%temp%\VBS.vbs"
    

    第一个命令打印 32 到 127 个字符的 ascii 列表。
    第二个打印 1 天前的日期
    其他的都如他们所说……

    @echo off
    for /l %%N in (32,1,127) do @call vbs right("00"+hex("%%N")+":",4)+chr(%%N)
    for /f %%Y in ('vbs date-1') do set Yesterday=%%Y
    echo %yesterday%
    for /f %%P in ('vbs 4*atn(1^)') do echo PI = %%P
    for /f %%S in ('vbs sqr(2^)') do echo Sq Root of2 = %%S
    for /f %%a in ('vbs 6.1+8.2') do set num=%%a
    echo %num%
    Pause
    

    【讨论】:

      【解决方案3】:

      本机批处理仅限于有符号的 32 位整数。有一些库可以扩展它的功能——谷歌是你的朋友。不确定您所说的“大”计算是什么意思 - 请举例说明。

      不管怎样,批次都是 S-L-O-W。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-01
        • 1970-01-01
        • 2017-02-03
        • 1970-01-01
        相关资源
        最近更新 更多