2

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

+0

Вы посмотрели PowerShell? – Neil

+0

проверить это http://www.robvanderwoude.com/battech_math.php – npocmaka

ответ

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.

0

Родная партия ограничена подписанными 32-битными целыми числами. Доступны библиотеки для расширения возможностей - Google - ваш друг. Не уверен, что вы подразумеваете под «большими» расчетами - пожалуйста, пример.

Независимо от того, пакет S-L-O-W.

2

Вы можете использовать скрипт 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 
+0

Добавлен код – foxidrive

 Смежные вопросы

  • Нет связанных вопросов^_^