dポイントプレゼントキャンペーン実施中!

お世話になっております
バッチファイルの、文字列操作で
----------------------------------------------------------
FOR /F "eol=; tokens=2,32 delims=, " %i in (myfile.csv) do @echo %i %j %k
----------------------------------------------------------
のtokensで指定している32列目(カンマが32個目)以降の値を
取得しません。
なぜでしょうか。

下記のHPを参照すると、一度変数をクリアしそのしたでさらにForで
指定すればよいとのことなのですが、欲しい値が多すぎて
とても、Forのしたに何度書きたくありません。
http://folomy.jp/heart/?m=pc&a=page_c_topic_deta …
どのようにしたら、目的を果たせるのでしょうか。
ご教授ください。

A 回答 (3件)

#1です。


リンク先を見落としていました。今試してみしたら確かに32以降は指定しても取得できないようです。仕様ですかね。
具体的にどれくらいの列を指示したいのでしょうか。
リンク先のような方法か、call文の引数で渡してサブルーチンで分解するくらいしか方法が思いつきません。スミマセン。
    • good
    • 0
この回答へのお礼

pita-gora様
ご回答ありがとうございます。
32bit版OSが関係しているのではないかとの噂を耳にしました・・・。
謎です。
仕方がないのでVBSで処理いたしました。
ありがとうございました。

お礼日時:2009/05/08 22:27

#1です。

追記です。

for文の2重ループで分解する方法の例を載せておきます。
tokens=2,32,33,35 に相当しているところが echo ![2]!,![32]!,![33]!,![35]! になります。

echo off
setlocal ENABLEDELAYEDEXPANSION
for /F "delims=" %%A in (myfile.csv) do (
set n=
for %%a in (%%A) do (
set /a n=n+1
set [!n!]=%%a
)
echo ![2]!,![32]!,![33]!,![35]!
)
endlocal
    • good
    • 0

こんにちは。



----------------------------------------------------------
FOR /F "eol=; tokens=2,32 delims=, " %i in (myfile.csv) do @echo %i %j %k
----------------------------------------------------------

>tokensで指定している32列目(カンマが32個目)以降の値を取得しません。
>なぜでしょうか。

tokens=2,32 が、2列目を%i に、32列目を%j に入れなさいという指示です。32列目以降については指示されていません。

FOR /F "eol=; tokens=2,32* delims=, " %i in (myfile.csv) do @echo %i %j %k

とすれば、2列目を%i に、32列目を%j に、32列目以降の残りすべてが %k に入ります。

FOR /F "eol=; tokens=2,32-35 delims=, " %i in (myfile.csv) do @echo %i %j %k %l %m

とすれば、2列目と32列から35列目までの内容を取得できます。
    • good
    • 2
この回答へのお礼

pita-gora様
ご回答ありがとうございます。
処理の概要は理解しているのですが
どうにも値を取得しませんでした。
しかたがないのでVBSで記述しました。
ありがとうございました。

お礼日時:2009/05/08 22:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A