[前の記事]« 長さが異なる新しいファイル名の生成方法
[次の記事]ファイルAから取得した文字列でファイルB内の文字列を置換えたい »

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

▲カテゴリー「遅延環境変数の展開」索引へ

通常の環境変数と遅延環境変数の組み合わせかた

412.
遅延環境変数と環境変数
2005年04月29日(金) 18時24分
初心者
●DOS/Windowsのバージョン↓
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

すみません、遅延環境変数と環境変数についてなのですが、
%SOMEVARIABLE!COUNT!%
という風にして環境変数の値を取得しようと
しているのですが、取得できません。
このような組み合わせ方はできないのでしょうか?
413.
Re:遅延環境変数と環境変数
2005年04月29日(金) 18時26分
じゃく
>●DOS/Windowsのバージョン↓
>Microsoft Windows XP [Version 5.1.2600]
>(C) Copyright 1985-2001 Microsoft Corp.

>すみません、遅延環境変数と環境変数についてなのですが、
>%SOMEVARIABLE!COUNT!%
>という風にして環境変数の値を取得しようと
>しているのですが、取得できません。
>このような組み合わせ方はできないのでしょうか?

ためしてないのですが、逆なのでは?
!SOMEVARIABLE%COUNT%!

勘違いならスミマセン。
414.
Re2:遅延環境変数と環境変数
2005年04月29日(金) 18時40分
初心者
じゃくさんありがとうございます。
できました!!

遅延変数の使い方がよくわからないのですが、
For文の中というより、GOTO文でループさせている
中でsetしているのはCOUNTとう変数のほうなのですが、
組み合わせるときは
!SOMEVARIABLE%COUNT%!
という形なんですね。。

単独でつかうときは
!COUNT!で値が取得できています。

なんだかよくわかりませんね。。

でもすぐにわかるじゃくさんはすごいですね。。


>>●DOS/Windowsのバージョン↓
>>Microsoft Windows XP [Version 5.1.2600]
>>(C) Copyright 1985-2001 Microsoft Corp.
>>
>>すみません、遅延環境変数と環境変数についてなのですが、
>>%SOMEVARIABLE!COUNT!%
>>という風にして環境変数の値を取得しようと
>>しているのですが、取得できません。
>>このような組み合わせ方はできないのでしょうか?

>ためしてないのですが、逆なのでは?
>!SOMEVARIABLE%COUNT%!

>勘違いならスミマセン。


417.
Re3:遅延環境変数と環境変数
2005年04月30日(土) 01時59分
otn
>遅延変数の使い方がよくわからないのですが、
>For文の中というより、GOTO文でループさせている
>中でsetしているのはCOUNTとう変数のほうなのですが、
>組み合わせるときは
>!SOMEVARIABLE%COUNT%!
>という形なんですね。。

>単独でつかうときは
>!COUNT!で値が取得できています。

>なんだかよくわかりませんね。。

一般の環境変数と、遅延環境変数という二種類の環境変数があるのではなくて、環境変数は一種類なのですが、値の参照のしかたが % によるものと ! によるものの二通りあるということです。
% による参照は構文解析時に行われ、! による参照はコマンド実行の直前に行われるというタイミングの違いがあります。
! の方が遅いので、「遅延」とついてます。

set /? を注意深く見るとわかりますが、正確には「遅延環境変数」という言葉があるわけではなく、「遅延環境変数の展開」という言葉が正しいです。「遅延」は「環境変数」にかかるのでなく、「展開」にかかる。わかりにくいですが、まあ誤訳と思えばよいかと。「環境変数の遅延展開」が正しい訳ですね。
419.
Re4:遅延環境変数と環境変数
2005年04月30日(土) 14時24分
初心者
>>遅延変数の使い方がよくわからないのですが、
>>For文の中というより、GOTO文でループさせている
>>中でsetしているのはCOUNTとう変数のほうなのですが、
>>組み合わせるときは
>>!SOMEVARIABLE%COUNT%!
>>という形なんですね。。
>>
>>単独でつかうときは
>>!COUNT!で値が取得できています。
>>
>>なんだかよくわかりませんね。。

>一般の環境変数と、遅延環境変数という二種類の環境変数があるのではなくて、環境変数は一種類なのですが、値の参照のしかたが % によるものと ! によるものの二通りあるということです。
>% による参照は構文解析時に行われ、! による参照はコマンド実行の直前に行われるというタイミングの違いがあります。
>! の方が遅いので、「遅延」とついてます。

>set /? を注意深く見るとわかりますが、正確には「遅延環境変数」という言葉があるわけではなく、「遅延環境変数の展開」という言葉が正しいです。「遅延」は「環境変数」にかかるのでなく、「展開」にかかる。わかりにくいですが、まあ誤訳と思えばよいかと。「環境変数の遅延展開」が正しい訳ですね。
>

OTNさんありがとうございます。参考になりました。
ただ通常の展開と遅延展開を組みあわせるときは
!通常の環境変数%遅延展開したい環境変数%!
(通常環境変数+遅延展開したい環境変数という文字列を
取得したい)
のように使うというのは不思議ですね。
なぜ普通に
%通常の環境変数%!遅延展開したい環境変数!
という書き方じゃないんでしょうね。
420.
Re5:遅延環境変数と環境変数
2005年04月30日(土) 15時40分
じゃく
>ただ通常の展開と遅延展開を組みあわせるときは
>!通常の環境変数%遅延展開したい環境変数%!
>(通常環境変数+遅延展開したい環境変数という文字列を
>取得したい)
>のように使うというのは不思議ですね。
>なぜ普通に
>%通常の環境変数%!遅延展開したい環境変数!
>という書き方じゃないんでしょうね。

こんにちは。
解釈が逆ですよ。文法上では、
>!通常の環境変数%遅延展開したい環境変数%!
ではなく
>!遅延展開したい環境変数%通常の環境変数%!
です。


>>>!SOMEVARIABLE%COUNT%!
COUNTの変数をGOTO文でどのように変化させているか
提示されていないのですが、変数名から察するに、
順番に増えていく数字なんでしょうね。

たとえば COUNT=1 となっていると、
set ans=!SAMEVARIAVLE%COUNT%!
が実行される場合、この行が実行される直前に%COUNT%が1に
置き換えられるので 
set ans=!SAMEVARIAVLE1!
として、この行が実行されて 環境変数 SAMEVARIAVLE1 の
内容が ans に代入されるという流れです。

バッチの先頭の、echo off (または @echo off)を削除して
実行しているバッチの出力を確認すると動きがわかりますよ。
 
 


カテゴリー「遅延環境変数の展開」索引へ

 

カテゴリー一覧

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


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

資料書籍

About

2005年04月29日 15:18に投稿されたエントリーのページです。

ひとつ前の投稿は「長さが異なる新しいファイル名の生成方法」です。

次の投稿は「ファイルAから取得した文字列でファイルB内の文字列を置換えたい」です。

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

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