[前の記事]« Windows95にWindows98のソフトを常駐させたらシステムが不調に
[次の記事]WindowsXPではBorland Turbo C++は使えない? »

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

▲カテゴリー「FOR .. IN ( ) DO..」索引へ

%変数の頭1文字を落とした値を取得したい


907) FOR文の%変数の部分参照 dai 2002/11/19(火) 18:40


FOR文を使用してファイルの中身を%変数に設定し処理を行っています。
仮に%aの値が「:DAI」となったとします。
この場合に、「DAI」のみを取り出して環境変数に設定することは可能でしょうか?
普通の環境変数%A%であれば、「%A:~1%」とすれば「DAI」が
取得できるのですが、FOR文の%変数でもこのような文字列操作が
どうしたらできますか?
ご存知の方居られましたらご教示ください。

911) Re:FOR文の%変数の部分参照 SYSOP 2002/11/20(水) 01:27


daiさん こんにちは。

>仮に%aの値が「:DAI」となったとします。
>この場合に、「DAI」のみを取り出して環境変数に設定することは可能でしょうか?

echo %a>temp.txt
for /F "delims=:" %%I in (temp.txt) do set %b=%%I

 ……みたいにいったんファイルに落としてfor /Fの機能を使う、という方法はどうでしょうか。

YanaKen

[個人homepage ]http://homepage3.nifty.com/yanaken/
[@pay窓口 ]http://pay.nifty.com/pay/servlet/pr?i=BDKQ048560
[@pay導入について]http://bbs1.nifty.com/mes/cf_wrent/FPCU_B017/


912) Re2:FOR文の%変数の部分参照 SYSOP 2002/11/20(水) 01:29


誤字訂正。

>for /F "delims=:" %%I in (temp.txt) do set %b=%%I

>for /F "delims=:" %%I in (temp.txt) do set b=%%I

YanaKen


915) Re2:FOR文の%変数の部分参照 dai 2002/11/20(水) 09:29


YanaKenさん、回答ありがとうございます。

ただ私の質問の説明が舌足らずだったようなので、
再度説明させてください。
>>仮に%aの値が「:DAI」となったとします。
>>この場合に、「DAI」のみを取り出して環境変数に設定することは可能でしょうか?

>echo %a>temp.txt
>for /F "delims=:" %%I in (temp.txt) do set %b=%%I

> ……みたいにいったんファイルに落としてfor /Fの機能を使う、という方法はどうでしょうか。
ここで「:DAI」としましたが、:以外にも任意の記号が入ってしまいます。
このため「%変数から:」を除く、というロジックではなく、
「%変数の頭1バイト(もしくは文字)を落とした値を取得する」
というようにしたい、という意味でした。
もしくは「%変数内の値を文字列置換する」でもいいのですが。
こういうことって可能ですか?
(ちなみにOSも書き忘れていたのですが、Win2000です。)


917) Re3:FOR文の%変数の部分参照 じゃく 2002/11/20(水) 10:15


こんにちは。

>ここで「:DAI」としましたが、:以外にも任意の記号が入ってしまいます。
>このため「%変数から:」を除く、というロジックではなく、
>「%変数の頭1バイト(もしくは文字)を落とした値を取得する」
>というようにしたい、という意味でした。
>もしくは「%変数内の値を文字列置換する」でもいいのですが。
>こういうことって可能ですか?
>(ちなみにOSも書き忘れていたのですが、Win2000です。)

一回投稿して、うまく動作しないので取り下げていました。
いろいろ調べたところ、callコマンドによるサブルーチンで
うまくできそうです。
ただ、検索するファイルが複数行ある時はどのようにしたいの
でしょう。同じ環境変数にどんどん上書きされますよ。
環境変数名もどんどん変えていくのでしょうか?(できるのかな?)

この例では、環境変数ansに先頭を取り除いた結果が入りますが、
最後の1行しか結果は残りません。

echo off
for /f "tokens=1* " %%a in ( list.txt ) do call :sub %%a
:end
exit /b

:sub
set ans=%1
set ans=%ans:~1%
goto :EOF

サブルーチン部分を以下のようにすればファイルに残ります。

:sub
set ans=%1
echo %ans:~1% >> ans.txt
goto :EOF


920) Re4:FOR文の%変数の部分参照 dai 2002/11/21(木) 09:54


どうもありがとうございました。
ご教示いただいた方法は参考になりましたが、
結局ファイルに複数行が存在するため、
dosバッチでは対処できないと判断し、別の方法で
作りこむことにしました。
このような文字列操作などはWSHなどを使用しないと
無理なのでしょうかね?

>こんにちは。

>>ここで「:DAI」としましたが、:以外にも任意の記号が入ってしまいます。
>>このため「%変数から:」を除く、というロジックではなく、
>>「%変数の頭1バイト(もしくは文字)を落とした値を取得する」
>>というようにしたい、という意味でした。
>>もしくは「%変数内の値を文字列置換する」でもいいのですが。
>>こういうことって可能ですか?
>>(ちなみにOSも書き忘れていたのですが、Win2000です。)

>一回投稿して、うまく動作しないので取り下げていました。
>いろいろ調べたところ、callコマンドによるサブルーチンで
>うまくできそうです。
>ただ、検索するファイルが複数行ある時はどのようにしたいの
>でしょう。同じ環境変数にどんどん上書きされますよ。
>環境変数名もどんどん変えていくのでしょうか?(できるのかな?)

>この例では、環境変数ansに先頭を取り除いた結果が入りますが、
>最後の1行しか結果は残りません。

>echo off
>for /f "tokens=1* " %%a in ( list.txt ) do call :sub %%a
>:end
>exit /b

>:sub
>set ans=%1
>set ans=%ans:~1%
>goto :EOF

>サブルーチン部分を以下のようにすればファイルに残ります。

>:sub
>set ans=%1
>echo %ans:~1% >> ans.txt
>goto :EOF


922) Re5:FOR文の%変数の部分参照 じゃく 2002/11/21(木) 13:10


こんにちは。

>結局ファイルに複数行が存在するため、
>dosバッチでは対処できないと判断し、別の方法で
>作りこむことにしました。
残念ですね。複数行に対して様々な変換の条件があるようなら
 私なら sed や awk を使いますね。
たとえば awk入門
http://www.eco.osakafu-u.ac.jp/~kazuhisa/awk.htm

>このような文字列操作などはWSHなどを使用しないと
>無理なのでしょうかね?
外部のコマンドやフリーソフトを導入しないなら
 そういうことになりますが、WSH もそれなりのコーディングを
 しますよね。ファイルの整形ならスクリプト言語(sed,awk,perl)
 をおすすめします。
 
 


カテゴリー「FOR .. IN ( ) DO..」索引へ

 

カテゴリー一覧

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


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

資料書籍

About

2002年11月19日 11:13に投稿されたエントリーのページです。

ひとつ前の投稿は「Windows95にWindows98のソフトを常駐させたらシステムが不調に」です。

次の投稿は「WindowsXPではBorland Turbo C++は使えない?」です。

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

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