批量设置右括号
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
)
)
这个问题在你下面的代码中重复出现。
我不明白:/ 批次太奇怪了。 你能帮我完成这项工作吗? 我得到的只是某些东西的位置错误。 我认为 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 aboutdelayed expansion
if you vary a variable within a codeblock
(parenthesised sequence of code)
cls
echo Ungueltiges Startkapital!
goto startkapital
)
)
这个问题在你下面的代码中重复出现。