[窓] DOSでのforループ

データに規則的なURLが割り当てられていて、それなりに
データ数が多い場合、いちいち1つずつブラウザからファイル
を見ていると面倒だったりする。(たいていは画像。)

まとめてダウンロードだけ先にやってしまい、あとは適当
なビューワーでローカルに落としたファイルを見る、の方が
効率よく見れるので、そういう簡単なツールをほしくなる
ときがある。

今時、そんなフリーソフトなんてごろごろあるに決まってる
のだが、せっかくなら手元にある環境で簡単になにか
作って、俺様仕様でいじれるようにしておくのも悪くない。
というわけで、javaでHTTPにてファイルをダウンロードする
簡単なコードを組んで、それをぐるぐる回してファイルを
落としてくるような仕組みを作ったのだが、DOSのfor文
にてハマった。ループが意図したように行かない。

javaのところでファイル名変えるようにすれば簡単なの
分かっているのだが、あえてDOSのfor文でそこをやって
みようとする自分もひねくれているw

なお、実行環境はWindows XP SP3のDOS窓。
DOS窓の起動は[窓] 右クリックメニューからのDOSプロンプト
の仕組みを使って右クリックにて便利に起動している。

さて問題の箇所だが、、、
FOR /L 変数 IN (初期値, 増分, 終了値) do (ループ処理)
のループ内にて、ループ変数を使ってファイル名を作り出す
ところのset文がうまくいかず、まちまちな特定の固定値
が1つだけ入れられている気がする。

調べてみると、遅延環境変数の展開が有効になっている
場合には、実行時に即時に環境変数を展開するための
記法(変数を!で囲む)があるのですな。

というわけで、以下がうまく行った版のバッチファイル。
setlocalのところと変数を%でなく!で囲むのがミソ。
TARGETとして指定しているバッチが、特定のURLに
あるファイルをローカルの特定ファイルパスに保存
するプログラム。


@rem
@rem get.bat
@rem

@echo off

setlocal ENABLEDELAYEDEXPANSION

@set TARGET=dataget.bat
@set URL_PAR=http://hoge.com/photos/
@set MIN=1
@set MAX=10

@FOR /L %%C IN ( %MIN% ,1 ,%MAX% ) DO (
@set FILE=%%C.jpg
echo file=!FILE!
@set URL=%URL_PAR%/!FILE!
@set LFILE=.\photo\!FILE!
@call %TARGET% !URL! !LFILE!
)


DOSのループ処理でハマッた時は、set /?をプロンプトで
実行して、説明を良く読むと解決するかもしれない。
それにしてもシェルスクリプトと比べるとなんて使いにくい。。



■関連エントリ

[窓]sumproduct

[窓]vistaでパーティションの操作
[始]Vistaのスタートアップの場所
[窓] PIDの表示と通信ポートの特定
[換] BASE64のエンコード・デコード(その1)
関連記事
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

kr2

Author:kr2
ネコと音楽が好き。
CD紹介、技術ネタ
などの雑記帳。

カレンダー
06 | 2017/07 | 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
黒ねこ時計 くろック
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
最近の記事
最近のコメント
最近のトラックバック
リンク
Zくん