在批处理中,我无法使用set /a
进行更高级的计算。小数不行;例如,set /a 5/2
只输出2
而不输出2.5
。批处理也不能处理大的计算。是否有一种方法可以使临时文件(如vbs)或调用另一个程序(如计算器)来进行计算并将其返回到批处理文件?
下面的程序是一个批处理-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代码更简单,更快。
你可以在批处理文件中使用Windows脚本主机的VBS脚本,或者Powershell,我猜如果它有更好的数学能力。
我改编自一个新闻组帖子,下面的批处理文件显示了一些例子。
你可以用它来做一些数学。
::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
本机批处理仅限于有符号32位整数。有一些库可以扩展它的功能——谷歌是你的朋友。不确定你所说的"大"计算是什么意思-请举例说明。
无论如何,批处理是S-L-O-W