|
649) 単純に指定回数繰り返す方法 Nomu 2003/10/02(木) 17:39 |
|
すごく基本的な内容のはずだし、 バッチファイルではなく、その外側で vbs(vbスクリプト)で制御すればできることも わかっていますが、どうも動作不安定のため、 できれば、バッチファイルだけでできないかと 考え質問させていただきます。 例えば9回同じ処理を繰り返すループは 下のFOR文でいけます。 FOR %%A IN (1 2 3 4 5 6 7 8 9) DO ECHO %%A バッチファイル起動時に%1で回数を受け取って DO 以降のコマンドを、単純にその回数分 実行するときはどのように記述したらよいのでしょうか。 比較などの演算子はあるものの %1 = %1 + 1 のような記述で ループカウンタ的な代入処理をすること はできないようでした。 本当に単純に %1 回分繰り返すだけなのですが 詰まってしまいました。悩むくらいなら バッチファイル呼び出し側で(VBS側で)処理すれば よいのですが、単純なだけにできないのが悔しくて・・・ よろしくお願いします。 |
|
650) Re:単純に指定回数繰り返す方法 ふぇむ 2003/10/02(木) 20:48 |
|
>バッチファイル起動時に%1で回数を受け取って >DO 以降のコマンドを、単純にその回数分 >実行するときはどのように記述したらよいのでしょうか。 例えば以下のような感じですか?(Win2000/XP) ------------------------------------------ SAMPLE-1 @echo off setlocal set LOOP_MAX=%~1 set LOOP_COUNTER=0 for /L %%a in (1,1,%LOOP_MAX%) do ( call :MAIN %%a ) goto :end :MAIN set LOOP_COUNTER=%~1 echo 今 %LOOP_COUNTER% 回目です goto :eof :end endlocal ------------------------------------------ SAMPLE-2 @echo off setlocal set /A LOOP_MAX=%~1 + 0 set LOOP_COUNTER=0 :MAIN_LOOP if %LOOP_COUNTER% GEQ %LOOP_MAX% goto :end set /A LOOP_COUNTER=LOOP_COUNTER + 1 call :MAIN goto :MAIN_LOOP goto :end :MAIN echo 今 %LOOP_COUNTER% 回目です goto :eof :end endlocal |
|
651) Re2:単純に指定回数繰り返す方法 Nomu 2003/10/02(木) 21:15 |
|
>------------------------------------------ SAMPLE-2 >@echo off > setlocal > set /A LOOP_MAX=%~1 + 0 > set LOOP_COUNTER=0 > >:MAIN_LOOP > > if %LOOP_COUNTER% GEQ %LOOP_MAX% goto :end > set /A LOOP_COUNTER=LOOP_COUNTER + 1 > > call :MAIN > > goto :MAIN_LOOP > > >goto :end > > >:MAIN > echo 今 %LOOP_COUNTER% 回目です > goto :eof > > >:end > endlocal > ありがとうございます!ばっちりできました。 助かりました >^|^< 感謝です。 |
|
652) Re3:単純に指定回数繰り返す方法 ふぇむ 2003/10/02(木) 21:55 |
|
>ありがとうございます!ばっちりできました。 それはよかった。(しかし見返すといかにも走り書きっぽいミスが...ちょっと恥ずかしい) ところで、 >>------------------------------------------ SAMPLE-2 なぜにこちらの方をご採用に? |
|
653) Re:単純に指定回数繰り返す方法 じゃく 2003/10/02(木) 22:31 |
|
http://homepage1.nifty.com/jak/batch/ |
|
>できれば、バッチファイルだけでできないかと >考え質問させていただきます。 > >例えば9回同じ処理を繰り返すループは >下のFOR文でいけます。 > >FOR %%A IN (1 2 3 4 5 6 7 8 9) DO ECHO %%A > >バッチファイル起動時に%1で回数を受け取って >DO 以降のコマンドを、単純にその回数分 >実行するときはどのように記述したらよいのでしょうか。 OSがわかりませんが、回答から 2000/XP系のようですね。 for /? を見てください。ループ回数を指定する方法が出ています。 > >比較などの演算子はあるものの >%1 = %1 + 1 のような記述で >ループカウンタ的な代入処理をすること >はできないようでした。 set /? を見てください。ループカウンタ的な代入処理 (というより四則演算)できることがわかると思います。 |
|
654) Re2:単純に指定回数繰り返す方法 Nomu 2003/10/03(金) 09:16 |
|
> for /? を見てください。ループ回数を指定する方法 が出ています。 forに対して /?することができるとは知りませんでした。 また、Windows2000のOSのヘルプ(スタートメニューにある分) のforコマンドのヘルプも当然調べていたのですが、 調べ方が甘かったようです。 forコマンドのヘルプから更に 追加フォームというリンクの クリックをする必要があったのですね。 恥じるばかりです。 >>比較などの演算子はあるものの >>%1 = %1 + 1 のような記述で >>ループカウンタ的な代入処理をすること >>はできないようでした。 > > set /? を見てください。ループカウンタ的な代入処理 > (というより四則演算)できることがわかると思います。 さてSAMPLE2を選んだ理由ですが、 SAMPLE1のほうがコーディング的には、 プログラム言語のForループらしく (インクリメントはコンピュータ側の作業) なるし、自分の感性にも合いました。 ただ、今までやり方がわからなかった 内部変数のインクリメントなどを自分で できるというのが嬉しくて(笑)、とにかく 1回やってみようと決断したのです。。。。 皆様本当にありがとうございました。 |
- ◆649. 単純に指定回数繰り返す方法 (Nomu) 2003/10/02(木) 17:39
- 650. Re:単純に指定回数繰り返す方法 (ふぇむ) 2003/10/02(木) 20:48
- 651. Re2:単純に指定回数繰り返す方法 (Nomu) 2003/10/02(木) 21:15
- 652. Re3:単純に指定回数繰り返す方法 (ふぇむ) 2003/10/02(木) 21:55
- 651. Re2:単純に指定回数繰り返す方法 (Nomu) 2003/10/02(木) 21:15
- 653. Re:単純に指定回数繰り返す方法 (じゃく) 2003/10/02(木) 22:31
- 654. Re2:単純に指定回数繰り返す方法 (Nomu) 2003/10/03(金) 09:16
- 650. Re:単純に指定回数繰り返す方法 (ふぇむ) 2003/10/02(木) 20:48