[前の記事]« 複数の変数の値をfor ループで一つずつ取り出す方法
[次の記事]最新の2つを残して古いログファイルを削除したい »

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

▲カテゴリー「FOR .. IN ( ) DO..」索引へ
▲カテゴリー「SET, PATH, %環境変数%」索引へ
▲カテゴリー「遅延環境変数の展開」索引へ

[FOR]コマンド実行結果の変数へのセットがうまくいかない

1266.
DOSコマンド実行結果を変数にセットする方法について
2006年07月17日(月) 09時58分
まどか
●環境
 OSはWindows XP で サービスパックは2です

●質問内容です
 DOSコマンド実行結果を変数にセットする方法
 を教えていただきたいです。
 例、
 dir c:\*.txt の結果を環境変数 test にセットしたいです。
 c:\にa.txt と b.txt と c.txt があったら、
 環境変数 test に a.txt b.txt c.txt と
 セットしたいです。

 きっと set コマンドを使うのだろうなというところ
 まではわかったのですが、dir の結果を取得する
 ところまでできるのですが、最後の結果(今回c.txt)のみが
 変数に設定されてしまいます。
 初歩的な内容で申し訳ございませんが、よろしく
 お願いします。
1268.
Re:DOSコマンド実行結果を変数にセットする方法について
2006年07月17日(月) 10時50分
まどか
過去の掲示板も調べたのですが、
No.525に似た内容があったのですが、
どうもうまくいかないようでした(dirを実行した
最後の一行しか変数に格納されないようでした)

1273.
Re:DOSコマンド実行結果を変数にセットする方法について
2006年07月18日(火) 11時15分
otn
>過去の掲示板も調べたのですが、
>No.525に似た内容があったのですが、
>どうもうまくいかないようでした(dirを実行した
>最後の一行しか変数に格納されないようでした)

おそらく、set /? の5ページ目あたりに書いてあるようなところでしょう。

     set LIST=
     for %i in (*) do set LIST=%LIST% %i
     echo %LIST%

↑これがなぜうまくいかないかが書いてあります。

案1:
     setlocal enabledelayedexpansion
     set LIST=
     for %i in (*) do set LIST=!LIST! %i
     echo %LIST%
案2:
     set LIST=
     for %i in (*) do call :sub %i
     echo %LIST%
     goto :eof
:sub
     set LIST=%LIST% %1
     goto :eof

1276.
Re:DOSコマンド実行結果を変数にセットする方法について
2006年07月18日(火) 11時28分
まどか
otnさん、ありがとうございます。
変数の遅延展開という機能(性質?)のためうまく
行かないのですね。
ヘルプ見てそうなのかな?と思ったのですが、書いてある
意味が難しかったのですが、otnさんの例を見てよくわかりました。
案1、案2ともにうまく行きましたが、今回は案2を
使うことにしました(setlocal enabledelayedexpansionを
設定してしまうことで、バッチのほかの部分に影響が
有ると心配)。
以上、ありがとうございました。@:
 
 


カテゴリー「FOR .. IN ( ) DO..」索引へ
カテゴリー「SET, PATH, %環境変数%」索引へ
カテゴリー「遅延環境変数の展開」索引へ

 

カテゴリー一覧

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


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

資料書籍

About

2006年07月17日 14:32に投稿されたエントリーのページです。

ひとつ前の投稿は「複数の変数の値をfor ループで一つずつ取り出す方法」です。

次の投稿は「最新の2つを残して古いログファイルを削除したい」です。

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

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