批量设置右括号

Batch setting Parentheses right

我不明白:/ 批次太奇怪了。 你能帮我完成这项工作吗? 我得到的只是某些东西的位置错误。 我认为 ifs 中的括号是错误的。 我尝试了多种组合,但 none 有效:/

:init
set ergebniss=
set laufzeit=
set zinssatz=
set skapital=
set i=
set help=

:input1
if NOT (%1)==()(
    set /a skapital=%1
    set /a zahl=%skapital% + 0
    goto input2
    if %zahl% neq %skapital% (
        cls
        echo Ungueltiges Startkapital!
        goto startkapital
    )
)

:startkapital
cls
echo Geben Sie ein Startkapital ein:
set /p skapital= 
set /a zahl=%skapital% + 0
if %zahl% neq %skapital% (
    cls
    echo Ungueltiges Startkapital!
    goto startkapital
)

:input2
if NOT (%2)==() (
    set /a zinssatz=%2
    set /a zahl=%zinssatz% + 0
    goto input3
    if %zahl% neq %zinssatz% (
        cls
        echo Ungueltiger Zinssatz!
        goto zinssatz
    )
)

:zinssatz
pause
cls
echo Geben sie den Zinssatz ein:
set /p zinssatz= 
set /a zahl=%zinssatz% + 0
if %zahl% neq %zinssatz% (
    cls
    echo Ungueltiger Zinssatz!
    goto zinssatz
)

:input3
if NOT (%3)==() (
    set /a laufzeit=%3
    set /a zahl=%laufzeit% + 0
    goto input3
    if %zahl% neq %laufzeit% (
        cls
        echo Ungueltige Laufzeit
        goto laufzeit
    )
)

:laufzeit
pause
cls
echo Geben sie eine Laufzeit ein:
set /p laufzeit= 
set /a zahl=%laufzeit% + 0
if %zahl% neq %laufzeit% (
    cls
    echo Ungueltige Laufzeit
    goto laufzeit
)

:berechne
set ergebniss=%skapital%
setlocal EnableDelayedExpansion
for /L %%i in (1,1,%laufzeit%) do  set  /a ergebniss=!ergebniss!+!ergebniss!*%zinssatz%/100

:ausgabe
cls
echo Das Kapital nach %laufzeit% Jahren ist %ergebniss%

:wiederhole
echo Wiederholen? [j/n]: 
set /p wh=
if "%wh%"=="j" (
    cls
    goto init )

修改后的代码:

:init
set ergebniss=
set laufzeit=
set zinssatz=
set skapital=
set i=
set help=
set zahl=

:input1
if NOT (%1)==() (
    set /a skapital=%1
    set /a zahl=%skapital% + 0
    if %zahl% neq %skapital% (
        cls
        echo Ungueltiges Startkapital!
        goto startkapital
    )
    goto input2
)

:startkapital
cls
echo Geben Sie ein Startkapital ein:
set /p skapital= 
set /a zahl=%skapital% + 0
if %zahl% neq %skapital% (
    cls
    echo Ungueltiges Startkapital!
    goto startkapital
)

:input2
if NOT (%2)==() (
    set /a zinssatz=%2
    set /a zahl=%zinssatz% + 0
    if %zahl% neq %zinssatz% (
        cls
        echo Ungueltiger Zinssatz!
        goto zinssatz
    )
    goto input3
)

:zinssatz
pause
cls
echo Geben sie den Zinssatz ein:
set /p zinssatz= 
set /a zahl=%zinssatz% + 0
if %zahl% neq %zinssatz% (
    cls
    echo Ungueltiger Zinssatz!
    goto zinssatz
)

:input3
if NOT (%3)==() (
    set /a laufzeit=%3
    set /a zahl=%laufzeit% + 0
    if %zahl% neq %laufzeit% (
        cls
        echo Ungueltige Laufzeit
        goto laufzeit
    )
    goto input3
)

:laufzeit
pause
cls
echo Geben sie eine Laufzeit ein:
set /p laufzeit= 
set /a zahl=%laufzeit% + 0
if %zahl% neq %laufzeit% (
    cls
    echo Ungueltige Laufzeit
    goto laufzeit
)

:berechne
set ergebniss=%skapital%
setlocal EnableDelayedExpansion
for /L %%i in (1,1,%laufzeit%) do  set  /a ergebniss=!ergebniss!+!ergebniss!*%zinssatz%/100

:ausgabe
cls
echo Das Kapital nach %laufzeit% Jahren ist %ergebniss%

:wiederhole
echo Wiederholen? [j/n]: 
set /p wh=
if "%wh%"=="j" (
    cls
    goto init )

解决方案:

:input1
if (%1)==() goto startkapital
set /a skapital=%1
set /a zahl=%skapital% + 0
if %zahl% neq %skapital% (
    cls
    echo Ungueltiges Startkapital!
    goto startkapital
)
goto input2
if NOT (%1)==()(

最后一个括号前必须有一个space,否则批处理无法判断您的指令是if NOT "(%1)"=="()("还是if NOT "(%1)"=="()" (

(顺便说一句,if "%1" neq "" ( 是等效的并且更强大)

备注

:input1
if NOT (%1)==() (
    set /a skapital=%1
    set /a zahl=%skapital% + 0
    goto input2

This following code won't be executed since execution has been transferred to :input2

    if %zahl% neq %skapital% (

Even if this code was executed, zahl is not defined at this point. You need to read about delayed expansion if you vary a variable within a code block (parenthesised sequence of code)

        cls
        echo Ungueltiges Startkapital!
        goto startkapital
    )
)

这个问题在你下面的代码中重复出现。