2017-11-17 16 views
0

私はこのバッチスクリプトでエラーがどこにあるのかを理解するために頭を痛めつけています。関数 "pow"の再帰によって与えられた数のpowを計算するのに使用されます。私の得たエラーは: "order1"は、内部または外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されません。 "base22"は、内部または外部コマンド、実行可能プログラムまたはバッチファイルとして認識されません。 両方のエラーは、「バッチ再帰がスタック制限を超えています」というステートメントが再帰を停止するまで、何度もシーケンス行に表示されます。 誰かがスクリプトでエラーを見つけることができますか?powを計算する再帰バッチスクリプト

@echo off 

set /a base1=3 
set /a base2=3 
set /a order=3 
call :pow %base1%, %base2%, %order% 
EXIT /B %ERRORLEVEL% 

:pow 
set /a base11=%~1 
set /a base22=%~2 
set /a order1=%~3 
order1=order1-1 
base22=base11*base22 
if %order1% GTR 0 (call :pow %base11%, %base22%, %order1%) 
else(echo the calculated pow is %base22%) 
EXIT /B 0 
+0

@pjs実際には、コマンドの一部として 'SET/A'が欠けています。 'SET/A'を使うときは、変数のパーセント記号は必要ありません。 – Squashman

+0

@Squashmanありがとう。シェルスクリプトにもっと慣れていますが、13行目と14行目は確かに私には疑わしいものでした。 – pjs

+0

WOPRの場合、「IF ELSE」の構文が正しくありません。 cmdプロンプトを開き、「IF /?」と入力します。 IF ELSEを使用するための正しい構文を表示します。 – Squashman

答えて

0

ここで私はバッチファイルでそれをやって検討する方法は次のとおりです。

@Echo Off 
Set "num1=3" 
Set "num2=3" 
Set "expo=3" 

Set/A base=num1*num2 
Set "rslt=1" 
For /L %%A In (1 1 %expo%) Do Set/A rslt*=base 
Echo %rslt% 
Pause 

ちょうどあなたが深刻な最大32ビット整数によって制限されることに注意してください。

関連する問題