2003 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 | 2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 2009 | 01 | 02 | 03 | 04 | 05 | 06 | |
2003-07-24(木)
■[CMD]setlocalしたスクリプトから外部の環境変数をセット

setlocalすると、スクリプト実行後の環境変数にセットするには、endlocalのあとでセットするしかない。
しかしセットしたい値はローカル変数に入っているので、endlocalの後では参照できない。
endlocalの後までローカル変数を持ち越す手段を講じる必要がある。
for の制御変数のスコープはdoのあとの文もしくはブロックであり、
setlocal/endlocalの影響を受けない。つまりローカル変数でない。
したがって、endlocalの前に、ローカル変数値をfor制御変数にセットしてendlocalの外で使う。
また、その後でまたsetlocalしたい場合、最初のsetlocal〜endlocalのスコープとは独立なので
最初のスコープのローカル変数を参照することは出来ない。スコープをまたがってのローカル変数の
引継ぎにもfor制御変数を使うことが出来る。
setlocal set A=local set B=result for /f "tokens=*" %%X in ("%A%") do ( ローカル変数の値を制御変数にセット for /f "tokens=*" %%Y in ("%B%") do ( endlocal set OUT=%%Y グローバルな環境変数へのセット setlocal set A=%%X スコープをまたがったローカル変数の引継ぎ ) ) echo %A%
追記:
もっといい方法があるので、この項、obsolete。
コメントを書く
トラックバック - http://d.hatena.ne.jp/otn/20030724/p1
リンク元
- 10 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=HPNW,HPNW:2006-41,HPNW:ja&q=".cmd"+SETLOCAL
- 8 http://search.yahoo.co.jp/bin/query?p=setlocal&fr=top
- 7 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&q=setlocal&btnG=検索&lr=lang_ja
- 5 http://www.google.co.jp/search?q=環境変数 引き継ぎ&sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2006-18,GGGL:ja
- 4 http://search.yahoo.co.jp/bin/query?p=setlocal&fr=top,+top
- 4 http://www.google.co.jp/search?hl=ja&q=SETLOCAL&btnG=Google+検索&lr=lang_ja
- 4 http://www.google.co.jp/search?q=setlocal&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 4 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=cmd+ローカル変数&num=50
- 3 http://search.yahoo.co.jp/bin/query?p=SETLOCAL&fr=slv1-
- 3 http://search.yahoo.co.jp/search?p=環境変数 setlocal&fr=top&src=top