|
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) をおすすめします。 |