在Windows批处理文件中使用计算变量作为命令行参数

时间:2014-07-17 09:18:33

标签: windows batch-file

我试图在FOR循环中计算变量值,然后在调用可执行文件时将其重用为命令行参数。 我设法计算变量,但我无法传递给exe文件

完整代码:

SetParameters.bat

SET PAYLOAD_SIZE=1024 
SET OPERATIONS_COUNT=20
SET THREADS=8
SET BULKSIZE=200

执行的bat文件

call 0_SetParameters.bat
SET MAX_EMPLOYEE_ID=0
setlocal enabledelayedexpansion

FOR %%n IN (1 2 4 8) do (
@SET /a MAX_EMPLOYEE_ID+=%OPERATIONS_COUNT%
echo !MAX_EMPLOYEE_ID!
Launcher.exe -P:%PAYLOAD_SIZE% -O:%OPERATIONS_COUNT% -N:test1 -T:%%n -BULKSIZE:%BULKSIZE% -MAX_EMPLOYEE_ID:%MAX_EMPLOYEE_ID%
)

echo!MAX_EMPLOYEE_ID! - 打印我需要的计算值,但是当我尝试将参数传递给exe文件时,变量等于0(初始变量值)。

我也试过

Launcher.exe -P:%PAYLOAD_SIZE% -O:%OPERATIONS_COUNT% -N:test1 -T:%%n -BULKSIZE:%BULKSIZE% -MAX_EMPLOYEE_ID:!MAX_EMPLOYEE_ID!

但这会传递字符串"!MAX_EMPLOYEE_ID!"而不是数值。 那么在调用exe文件时如何使用这个变量?

更新: 好的,我明白这里发生了什么。实际上一切正常,可执行文件使用计算参数调用,但输出到控制台是打印-MAX_EMPLOYEE_ID:!MAX_EMPLOYEE_ID!

调用可执行文件的正确方法是

Launcher.exe -P:%PAYLOAD_SIZE% -O:%OPERATIONS_COUNT% -N:test1 -T:%%n -BULKSIZE:%BULKSIZE% -MAX_EMPLOYEE_ID:!MAX_EMPLOYEE_ID!

1 个答案:

答案 0 :(得分:0)

以下是一个证明您的代码有效的示例:它没有使用%% n变量,因为您的代码没有使用它。

@echo off
set OPERATIONS_COUNT=5
setlocal enabledelayedexpansion
FOR %%n IN (1 2 4 8) do (
SET /a MAX_EMPLOYEE_ID+=OPERATIONS_COUNT
echo !MAX_EMPLOYEE_ID!
echo Launcher.exe -MAX_EMPLOYEE_ID:!MAX_EMPLOYEE_ID!
)
pause