[窓] DOSでのforループ
データに規則的なURLが割り当てられていて、それなりに
データ数が多い場合、いちいち1つずつブラウザからファイル
を見ていると面倒だったりする。(たいていは画像。)
まとめてダウンロードだけ先にやってしまい、あとは適当
なビューワーでローカルに落としたファイルを見る、の方が
効率よく見れるので、そういう簡単なツールをほしくなる
ときがある。
今時、そんなフリーソフトなんてごろごろあるに決まってる
のだが、せっかくなら手元にある環境で簡単になにか
作って、俺様仕様でいじれるようにしておくのも悪くない。
データ数が多い場合、いちいち1つずつブラウザからファイル
を見ていると面倒だったりする。(たいていは画像。)
まとめてダウンロードだけ先にやってしまい、あとは適当
なビューワーでローカルに落としたファイルを見る、の方が
効率よく見れるので、そういう簡単なツールをほしくなる
ときがある。
今時、そんなフリーソフトなんてごろごろあるに決まってる
のだが、せっかくなら手元にある環境で簡単になにか
作って、俺様仕様でいじれるようにしておくのも悪くない。
というわけで、javaでHTTPにてファイルをダウンロードする
簡単なコードを組んで、それをぐるぐる回してファイルを
落としてくるような仕組みを作ったのだが、DOSのfor文
にてハマった。ループが意図したように行かない。
javaのところでファイル名変えるようにすれば簡単なの
分かっているのだが、あえてDOSのfor文でそこをやって
みようとする自分もひねくれているw
なお、実行環境はWindows XP SP3のDOS窓。
DOS窓の起動は[窓] 右クリックメニューからのDOSプロンプト
の仕組みを使って右クリックにて便利に起動している。
さて問題の箇所だが、、、
FOR /L 変数 IN (初期値, 増分, 終了値) do (ループ処理)
のループ内にて、ループ変数を使ってファイル名を作り出す
ところのset文がうまくいかず、まちまちな特定の固定値
が1つだけ入れられている気がする。
調べてみると、遅延環境変数の展開が有効になっている
場合には、実行時に即時に環境変数を展開するための
記法(変数を!で囲む)があるのですな。
というわけで、以下がうまく行った版のバッチファイル。
setlocalのところと変数を%でなく!で囲むのがミソ。
TARGETとして指定しているバッチが、特定のURLに
あるファイルをローカルの特定ファイルパスに保存
するプログラム。
DOSのループ処理でハマッた時は、set /?をプロンプトで
実行して、説明を良く読むと解決するかもしれない。
それにしてもシェルスクリプトと比べるとなんて使いにくい。。
■関連エントリ
[窓]sumproduct
[窓]vistaでパーティションの操作
[始]Vistaのスタートアップの場所
[窓] PIDの表示と通信ポートの特定
[換] BASE64のエンコード・デコード(その1)
簡単なコードを組んで、それをぐるぐる回してファイルを
落としてくるような仕組みを作ったのだが、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)
- 関連記事
-
- [読] expect (2009/04/09)
- [線] 光ファイバーケーブル (2009/03/22)
- [窓] DOSでのforループ (2009/03/15)
- [窓]sumproduct (2009/02/18)
- [窓]vistaでパーティションの操作 (2009/02/17)
スポンサーサイト