質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

解決済

1回答

1634閲覧

Windows bat のfor 及び if を使った csv内部データ取得について

suika000

総合スコア2

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2022/12/07 08:15

前提

Windowsのバッチファイルでcsvを読み込み、csvから日付が作動日と同じデータを持ってくる動作をする
バッチファイルを作成したい

実現したいこと

csvファイル(日付’yyyymmdd’と文字列のみ)から作動日と同じ日付が記載されている行の文字列を変数として取得する

発生している問題・エラーメッセージ

IFで文字列判定がなされおらず echo !b!を実施してもcsvファイル件数分すべてが表示される。

該当のソースコード

windows.bat

1@echo off 2 3set Target_Date=%date:/=% 4FOR /F " tokens=1,2" %%a in (test2.csv) do ( 5echo IF "%Target_Date%" == "%%a" set Data_01 = %%b 6)

試したこと

上記内容に確認のために
echo "!b!" を記入してみるも全件!b!が表示されました。

補足情報

batを勉強しはじめて間もないものの、検索しても思う形の情報が見つかりませんでした。
有識者の方ご教授お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

検索しても思う形の情報が見つかりませんでした。

基本を理解していない状態で、検索&コピペで何とかしようとすると、深みにはまるばかりかと思います。

確認のためにと言っても、FORループ内でECHOしているので、

text

1IF "20221207" == "20221206,aaaa" set Data_01 = 2IF "20221207" == "20221207,bbbb" set Data_01 = 3IF "20221207" == "20221208,cccc" set Data_01 =

のような物が表示されるはずです。それで十分、「間違っていること」の確認になるかと思います。

カンマ区切りで行を分割したければ、delims=,とカンマで分割するという指定が必要です。

また、setの使い方も間違っています。
set Data_01 = %%bは、おそらくData_01という環境変数に%%bの値をセットするつもりでしょうが、
これは、Data_01 と最後に空白1文字を含んだ変数名の変数(※)に、空白1文字の後に%%bの値を連結した物をセットします。Data_01という環境変数に%%bの値をセットためには、余計な空白を削除する必要があります。

CMD

1@echo off 2 3set Target_Date=%date:/=% 4set Data_01=NotFound 5for /F "delims=, tokens=1,2" %%a in (test2.csv) do ( 6 if "%Target_Date%" == "%%a" set Data_01=%%b 7) 8echo %Data_01%

※:多くのプログラミング言語と事なり、Windowsバッチスクリプトの環境変数は変数名に英数字だけでなく、空白を含めてかなりの記号が使えます。

CMD

1set A=123 2set A =456 3set A+=789 4echo %A% 5echo %A % 6echo %A+%

投稿2022/12/07 12:57

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suika000

2022/12/07 23:42

空白が変数の一部になるという点、全く知りませんでした。。。ありがとうございます!思う形でデータ取得できました。
otn

2022/12/08 01:06 編集

あと、 echo abc >filename と書くと、filenameというファイルに、abcと空白1つ(と改行)が書かれますので、abcだけを書きたいときは空白を詰めます。という風に、空白が無視されないことがしばしばですね。常にではないが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問