乘以误差:*此时出乎意料

时间:2015-05-31 18:01:42

标签: batch-file

我最近遇到了一个问题。我正在批量制作一个游戏模块,我遇到了一个奇怪的错误:

  

倍增错误“*!Map_PlayerLengthX!此时出乎意料”

这是整个代码:

@echo off
setlocal enabledelayedexpansion

pause >nul
cls
call :Map_DefinePlayer 4 2 loloolol
echo %Px1y1%%Px2y1%%Px3y1%%Px4y1%
echo %Px1y2%%Px2y2%%Px3y2%%Px4y2%
pause >nul

:::::::::::::::::::::::::::
:: Map v0.10 By KKZiomek ::
:::::::::::::::::::::::::::
:Map_Init
set Map_Running=1
goto :eof
:Map_Load
if !Map_Running!==0 goto :eof
set Map_Load_FileToLoad=%~1
set Map_Load_BorderX=%~2
set Map_Load_BorderY=%~3
set Map_Load_BChar=%~4
set Map_Load_LineTotal=0
for /f "tokens=* delims= usebackq" %%l in (!Map_Load_FileToLoad!) do (
    set /a Map_Load_LineTotal+=1
    set Map_Line!Map_Load_LineTotal!=%%l
)
:Map_Load_ApplyCoords
for /l %%g in (1,1,!Map_Load_LineTotal!) do (
    call :Map_Load_StrLen Map_Line%%g Map_Line%%g_Len
    set /a Map_Load_ApplyCoords_DecidedLen+=!Map_Line%%g_Len!
)
set /a Map_Load_ApplyCoords_DecidedLen/=!Map_Load_LineTotal!
for /l %%y in (1,1,!Map_Load_LineTotal!) do (
    for /l %%x in (1,1,!Map_Load_ApplyCoords_DecidedLen!) do (
        set x%%xy%%y=!Map_Line%%y:~%%x,1!
    )
)
goto :eof
:Map_Load_StrLen
setlocal disabledelayedexpansion
set Map_Load_StrLen_Len=0
if defined %~1 for /f "delims=:" %%n in (
  '"(cmd /v:on /c echo(!%~1!&echo()|findstr /o ^^"'
) do set /a "Map_Load_StrLen_Len=%%n-3"
endlocal & if "%~2" neq "" (set %~2=%Map_Load_StrLen_Len%) else echo %Map_Load_StrLen_Len%
exit /b
:Map_Display
cls
for /l %%y in (1,1,!Map_Load_LineTotal!) do (
    set Map_Display_Line%%y=
    for /l %%x in (1,1,!Map_Load_ApplyCoords_DecidedLen!) do (
        set Map_Display_Line%%y=!Map_Display_Line%%y!!x%%xy%%y!
    )
)
for /l %%z in (1,1,!Map_Load_LineTotal!) do (
    echo !Map_Display_Line%%z!
)
goto :eof
:Map_ReloadPos
set XPos=%~1
set YPos=%~2
set x!XPos!y!YPos!=!Map_Line%YPos%:~%XPos%,1!
goto :eof
:Map_DefinePlayer
set Map_PlayerLengthX=%~1
set Map_PlayerWidthY=%~2
set Map_DefinePlayer_Scheme=%~3
set /a Map_DefinePlayer_Modifier=!Map_PlayerLengthX!-1
for /l %%p in (1,1,!Map_PlayerWidthY!) do (
    for /l %%q in (0,1,!Map_DefinePlayer_Modifier!) do (
        set /a localq=%%q+1
        set /a modq=%%q+((%%p-1)*!Map_PlayerLengthX!)
        set Px%localq%y%%p=!Map_DefinePlayer_Scheme:~%modq%,1!
    )
)
:::::::::::::::::::::::::::
:::::::::::::::::::::::::::
:::::::::::::::::::::::::::

我在函数:Map_DefinePlayer中收到错误。我认为这主要是在这一行:set /a modq=%%q+((%%p-1)*!Map_PlayerLengthX!)

由于这种奇怪的乘法误差,每个函数都能正常工作而不是这个函数。我尝试再次尝试延迟扩展,将!Map_PlayerLengthX!更改为%Map_PlayerLengthX%,但之后只更改了*4 was unexpected at this time中的错误

任何人都知道导致这种情况的原因以及如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

尝试:

set /a "modq=%%q+((%%p-1)*!Map_PlayerLengthX!)"

表达式中的括号被视为FOR循环

的右括号