WindowsバッチでのCSV読み込みについて

このQ&Aのポイント
  • WindowsバッチにてCSVファイルのデーターの読み込みを行いたいと考えています。課題としては、ダブルクォーテーションで括ったカラムをひとつの要素として扱うことができません。
  • 上記のバッチを実行すると、ダブルクォーテーションで括ったカラムが途中で分割されてしまいます。求める結果は、ダブルクォーテーションで括ったままのカラムを取得することです。
  • 解決方法としては、バッチのオプションや記述方法を工夫する必要があります。エスケープ文字や特殊文字を用いることで、カラムの分割を回避できる可能性があります。その他、別のプログラミング言語やツールを使用することも考えられます。
回答を見る
  • ベストアンサー

WindowsバッチのCSV読み込みについて

WindowsバッチにてCSVファイルのデーターの読み込みを行いたいと考えています。 CSVの中身(test.csv)------------------------------------- "CN=test1,CN=users,DC=testdomain,DC=local","test1","aaa" "CN=test2,CN=users,DC=testdomain,DC=local","test2","bbb" 上記の取り込み方として、以下のバッチを実行しようとした場合、求めている結果になりません。 for /f "delims=, usebackq tokens=1-3 usebackq" %%i in ("test.csv") do echo %%i, %%k ○求める結果 "CN=test1,CN=users,DC=testdomain,DC=local","aaa" "CN=test2,CN=users,DC=testdomain,DC=local","bbb" ○得られた結果 "CN=test1,CN=users,DC=testdomain "CN=test2,CN=users,DC=testdomain ""(ダブルコーテーション)で括ったものを、ひとつのカラムとして受け渡したすことはできないでしょうか。よろしくお願い致します。

  • sukem
  • お礼率100% (2/2)

質問者が選んだベストアンサー

  • ベストアンサー
  • davidfox
  • ベストアンサー率58% (21/36)
回答No.2

>""(ダブルコーテーション)で括ったものを、ひとつのカラムとして受け渡したすことはできないでしょうか。 出来ないと思います。 出来るように作られていないようです。 問題を解決するには、CSV形式か、Windowsバッチのみを諦めればいい訳ですが...

sukem
質問者

お礼

回答ありがとうございました。 バッチで、"CN=test1,CN=users,DC=testdomain,DC=local"を一つのカラムとして受け渡しは難しいようですね。 残念ですが、別の方法を検討してみます。

その他の回答 (1)

  • 8ive22ty
  • ベストアンサー率52% (770/1479)
回答No.1

tokensの指定がおかしいのでは? for /f "delims=, usebackq tokens=1,2,3,4,6" %%i in ("test.csv") do echo %%i, %%j, %%k, %%l, %%m

sukem
質問者

お礼

回答ありがとうございました。 tokensの設定をあれこれいじっても、うまくいきませんでした。。。

関連するQ&A

  • バッチでファイルの読み込み

    Windowsバッチでファイルの読み込みをしようと思っているのですが、 下記コマンドの実行で「ファイルが見つかりません」となります。 ※パスにスペースを含むのでusebackqを使用しました。 FOR /F "usebackq tokens=1,2 delims= " %%i in ("c:\temp 1\data.txt") DO echo %%i WindowsServer2003でうまくいかなかったのですが、 Xpですれば問題なくファイルを読み込めました。 何か差があるのでしょうか?

  • バッチで118項目のCSVを処理したいですが。。。

    バッチファイルで一行に、118項目のあるCSVファイルを読み込んで、必要な項目を抽出して、新しいCSVを作りたいです。 いろいろ調べたら for /f "delims=, tokens=1-3" %%I in (sample.csv) do ( echo %%I %%J %%K>> new.csv ) で実現できると思っていましたが、tokensに値の制限があって、tokens=1-118にすると、うまくいかないです。 どなたかいい方法をご存知でしたら、教えていただきたいですが。

  • バッチでcsvファイルの指定のカラムを編集したい

    バッチでファイルの編集をしたい バッチファイルを使用して、csvファイルの読み込み~編集を行いたいと思っております 元ファイル:TEST_DATA.csv 内容: 111,222,333,444,555 123,456,789,321,987 上記のcsvファイルを読み込み、 ・5カラム目が987ならば3カラム目を654に変更する という処理を実行させたいのですが、 どのように行えばよいのでしょうか? 現在考えていることは、 1.for文を使用して指定のカラムを抜く(3カラム目と5カラム目を抜く)) 2.5カラム目の値をif条件に指定し、合致した場合、抜いた3カラム目の変数に654を入れる 3.654に変更した変数を3カラム目の値として入れる という順番で行えばいいと思っているのですが、 下記まで行ったところで行き詰ってしまいました for /F "tokens=3,5 delims=," %%i IN (TEST_DATA.csv) DO @(if %%j==987 set %%i=654 echo %i %j ) お分かりになられる方、ご教授願えませんでしょうか

  • バッチでCSVを処理する時、空の項目があった場合

     例えば、以下のような二行からなるCSVファイルが有ります。 TK,001,A,DC, ,5,12 TK,002,B,DC,13,6,13   バッチで、このファイルを読み込んで、以下のようなレイアウトでCSVファイルを出力したいです。 TK,A, ,12 TK,B,13,13  しかし、一行目のデータに空の項目が発生していますので、 for /f "delims=, tokens=1-7" %%I in (sample.csv) do ( … )  で処理した場合、自動に、空の項目を飛ばし、次の項目を読み込みますので、出力ファイルは以下のようになってしまいます: TK,A,5 ,12 TK,B,13,13    こういうことを避けたいですが、なかなかいい方法が見つかりません。解決方法をご存知の方、教えていただけませんか?

  • DOSコマンド FOR/F について

    DOSコマンド FOR/F について アクティブディレクトリにユーザーを一括で登録する作業をしています。 dsadd.batを作成しFOR/Fによりtest.csvの内容を取得して、その値をDSADDコマンドに代入することで一行づつユーザーを登録する方法を試しています。 dsadd.batの内容 @FOR /F "TOKENS=1-3 DELIMS=," %%a IN (test.csv) DO dsadd user CN=%%a,OU=testou,DC=test,DC=local -display %%a -samid %%b -upn %%b -pwd %%c -fn 太郎 -ln 登録 -u administrator -p password -d test.local test.csvの内容 1tttt,t_touroku,touroku123 2tttt,t_touroku,touroku123 3tttt,t_touroku,touroku123 ところがdsadd.batを実行させると以下のように1行目ばかりの読み込みを延々行います。 C:\adduser>dsadd user CN=1tttt,OU=testou,DC=test,DC=local -display 1tttt -samid t_touroku -upn t_touroku -pwd touroku123 -fn 太郎 -ln 登録 -u administrator -p password -d test.local C:\adduser>dsadd user CN=1tttt,OU=testou,DC=test,DC=local -display 1tttt -samid t_touroku -upn t_touroku -pwd touroku123 -fn 太郎 -ln 登録 -u administrator -p password -d test.local C:\adduser>dsadd user CN=1tttt,OU=testou,DC=test,DC=local -display 1tttt -samid t_touroku -upn t_touroku -pwd touroku123 -fn 太郎 -ln 登録 -u administrator -p password -d test.local FOR/Fの文法部分が駄目なのでしょうか? 困っています。 どなたかお知恵をいただきたく存じます。

  • バッチファイル

    お世話になります。 バッチファイルを用いて、実行されるプログラムがあります。 私の作成したものではないので、どのようなやり取りが内部で行われているのかは、詳細はわかりません。 例えば、D:\Programフォルダーの中にプルグラムをインストールしたとすれば、引数を2つ指定して(例:aaaとbbb)、バッチファイル(test.bat)を以下のように実行すれば、プログラムは正常に作動します。 D:\Program>test aaa bbb しかし、以下の場合には、正常に作動しません。 C:\>D:\Program>test aaa bbb つまり、パスを含めて、バッチファイルを実行することは、このプログラムは許可してくれません。 ここで、例えば、VBなどを用いて、テキストボックスなどで引数を二つ指定して、実行ボタンをクリックすれば、必ず、D:\Program>test aaa bbbという状態で、バッチファイルが実行されるようにするには、どのようにすればよろしいでしょうか? もしご存知の方がいらっしゃいましたら、是非、ご教授願います。 以上、宜しくお願いいたします。

  • CSVファイルの「”」について

    VB6でCSVファイルを読み込みたいのですが、 以下のような項目だと、1項目として読み込むことができません。 例) AAA,"BBB,CCC,"" """,DDD "BBB,CCC,"" """ を1項目として読み込みたいのですが ダブルコーテーションの括りの中に、更にダブルコーテーションがあると うまくいかないみたいです。 何か方法がありますでしょうか? Open DownLoadFile For Input As #1 Len = 32000 Input #1, rec Do Until EOF(1) 処理1 Loop close #1

  • ActiveDirectoryのユーザー一括登録

    Win2008r2でADを構築し、ユーザー情報の抜出(export)、一括登録(import)を csvdeコマンドで練習しております。 C:>csvde -u -f export.csv -r objectCategory=user コマンドにより、なんとかCSV形式で、ADに登録されている情報を抜き出すことはできました。 ecportしたファイルを基にしてimport用データーを作成したのですが、上手く行かない状態です。 登録するユーザー ⇒user03とuser04 import.csvの中身↓↓ N,objectClass,cn,name,userAccountControl,sAMAccountName,sn,displayName,userPrincipalName "CN=user03,OU=Test-OU,DC=test,DC=local",user,user03,user03,512,user03,user03,user03,user03@test.local "CN=user04,OU=Test-OU,DC=test,DC=local",user,user04,user04,512,user04,user04,user04,user04@test.local import.csvを実行すると。 C:>csvde -i -f import.csv "(null)" に接続しています SSPI を使って現在のユーザーとしてログインしています ファイル "import.csv" からディレクトリをインポートしています 入力ファイルを開くときにエラーがありました 0 個のエントリを正しく修正しました。 プログラムでエラーが発生しました ログはファイルに書き込まれませんでした。ログ ファイルを生成するには、 -j オプションを使ってログ ファイルへのパスを指定してください。 という状態になってしまいます。 以下のサイトを参照して行っています。 http://itpro.nikkeibp.co.jp/article/COLUMN/20080125/292017/ どなたかご教授下さい。

  • バッチファイルで2行にわたるコマンドを入力したいのですが

    バッチファイルで複数行にわたるコマンドを打ちたいのですが、方法がわからなくて困っています。 for /f "tokens=1,2,3 delims=/ " %%a in ('date /t') do ( set hinichi=%%a%%b ) "C:\Program Files\Lhaca\Lhaca.exe" "test%hinichi%01.txt" "test%hinichi%02.txt" ・・・・・・・ と31個のファイルを圧縮するバッチです。 体裁の問題ですが、 for /f "tokens=1,2,3 delims=/ " %%a in ('date /t') do ( set hinichi=%%a%%b ) "C:\Program Files\Lhaca\Lhaca.exe" ? "test%hinichi%01.txt" ? "test%hinichi%02.txt" ・・・ としたいのですが各行のつなぎの記号?がわかりません。 ご存知の方、よろしくお願いいたします。

  • PowerShellでCSVを文字列に組立る方法

    以下の内容のCSVファイルから「CN=test,OU=test_ou,DC=test,DC=domain」の結果を最小限のPowerShellで得るにはどのようにすればよろしいでしょうか? Name,OU,Domain test,test_ou,test.domain いろいろ試してみたのですが、きれいにこの形にできませんでした。 よろしくお願いいたします。