[前の記事]« 名前に空白を含むファイルをコピーするには
[次の記事]ファイル内から指定の文字列を検索し、そこから10文字を抽出したい »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「FOR .. IN ( ) DO..」索引へ

バッチ起動時に指定した回数だけFOR文を実行するには


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
    •  653.  Re:単純に指定回数繰り返す方法 (じゃく)   2003/10/02(木) 22:31
      •  654.  Re2:単純に指定回数繰り返す方法 (Nomu)   2003/10/03(金) 09:16
 
 


カテゴリー「FOR .. IN ( ) DO..」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2003年10月02日 11:34に投稿されたエントリーのページです。

ひとつ前の投稿は「名前に空白を含むファイルをコピーするには」です。

次の投稿は「ファイル内から指定の文字列を検索し、そこから10文字を抽出したい」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート