2012-03-18 12 views
4

バッチファイルを実行して10回呼び出すようにします。番号が無効です。数値定数は、小数点(17)、16進数(0x11)、または8進数(021)のいずれかです。

set /a iteration=0%1+1 
IF %iteration% EQU 10 exit 
rem Taskkill /IM aspnet_compiler.exe /F 
timeout 1 
call KillBILLd.bat %iteration% 

しかし、それだけでライン上の

Invalid number. Numeric constants are either decimal (17), hexadecimal (0x11), 
or octal (021). 

set /a iteration=0%1+1 

どのように私はこのエラーを修正することができてerroring前に、数8に得るのだろうか?

答えて

6

あなたはその式に - 引数が8の場合、有効な8進数ではない08(8は8進数ではない)に展開され、そのエラーが発生します。私は、バッチファイルの専門家ではないんだけど、私はあなたが0リードオフのままにしたいと思います:

set /a iteration=%1+1 

は、ここではいくつかのSET command documentationへのリンクです。

+0

あーに展開するだろう!私はバットファイルを初めて呼び出すときに番号が渡されていないので、不正行為をしようとしていました。%1が空であれば、ifステートメントを0に設定してこの問題を修正しました。 –

+0

しかし、式が空の '%1 'でも有効であるので、'%1'が空であるかどうかをテストする必要はありません – jeb

4

Carlが言ったように、先頭のゼロは8進数の記号です。
%1が空の場合のエラーを避けるため、先行ゼロが便利なように見えることがあります。

しかし、あなたはこのタイプの問題を抱えていますが、これは少し別の方法で解決できます。

を前もって1以上、100とし、モジュロを構築することは、数字8と9(また空の入力)でも機能します。

set /a iteration=1000%1 %% 100 + 1 

しかし、あなたの場合には、それはゼロを削除するには、%1あなたは有効な式を得た空であっても、十分なはずです。

set /a iteration=%1 + 1 

set /a iteration= + 1

+0

ありがとう、私はそれを使用します。 –