最新の日記 記事一覧 ログイン 無料ブログ開設

それはそれ。これはこれ。 このページをアンテナに追加 RSSフィード

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(木)

[]setlocalしたスクリプトから外部の環境変数をセット setlocalしたスクリプトから外部の環境変数をセット - それはそれ。これはこれ。 を含むブックマーク はてなブックマーク - setlocalしたスクリプトから外部の環境変数をセット - それはそれ。これはこれ。 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。