Пакетное - делать более сложные расчеты

В пакетном режиме у меня проблемы с выполнением более сложных вычислений с set /a, Десятичные дроби не будут работать; например set /a 5/2 только выходы 2 вместо 2.5, Также пакет не может обрабатывать большие вычисления. Есть ли способ просто создать временный файл (например, vbs) или вызвать другую программу (например, калькулятор), чтобы выполнить расчет и вернуть его обратно в командный файл?

3 ответа

Решение

Приведенная ниже программа в качестве примера гибридного сценария 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.

Вы можете использовать сценарий VBS с помощью Windows Scripting Host в пакетном файле, или, возможно, 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"

Первая команда печатает список символов ascii от 32 до 127.
Вторая печатает дату 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-разрядными целыми числами со знаком. Доступны библиотеки для расширения его возможностей - Google - ваш друг. Не уверен, что вы подразумеваете под "большими" расчетами - приведите пример.

Несмотря на это, партия медленная.

Другие вопросы по тегам