バッチファイル初心者です(+teratail今回初体験です、失礼あったらすみません)
ネットのサンプルをわからないながら色々ツギハギしており、内容を完璧には理解できていません。
よろしくお願いいたします。
やりたいこと
集計日列の".csv"が出てこないようにしたい。
わからないこと
set TARGET_FILE=%%a echo TARGET_FILE=!TARGET_FILE!
このへんをどうにかできれば、.csvが付かないのではと思われるが、分割の仕方がわからない。
バッチファイルでやってる(はずの)こと
- 番号リストリストファイルが格納されてるフォルダの名前を取得して、まとめ用のファイル名に使う
- 1ファイル目の処理のときだけ、別ヘッダを出力し、2ファイル目からは1行目をスルーする
- 参照元csv(計5列)のうち、1,3,4,5列目を取り出し、行頭に、参照元csvファイルのファイル名をくっつけて書き出す…を、ディレクトリの中にあるcsvファイル全部分、繰り返す
試しているバッチファイルの内容
@echo off setlocal enabledelayedexpansion rem /*設定***************************************************/ rem ファイルの文字コードがUTF-8の場合は削除 rem chcp 65001 rem ヘッダーを判定するための行カウント set /a cnt=0 rem このバッチファイルが格納されているフォルダ名を取得 set THIS_PATH=%~dp0 for %%1 in ("%THIS_PATH:~0,-1%") do set FOLDER_NAME=%%~nx1 rem 出力ファイル名を設定 set FILE_NAME=!FOLDER_NAME!_log.csv rem /*処理***************************************************/ rem フォルダにあるCSVファイルを1つずつ処理 for /f %%a in ('dir /b *.csv') do ( set TARGET_FILE=%%a rem ファイル名を出力 echo TARGET_FILE=!TARGET_FILE! rem 1ファイル目であればヘッダーを出力 if !cnt!==0 ( echo 集計日,商品コード,購入件数(件),数量(個),金額>>"!FILE_NAME!" ) rem カウントを追加 set /a cnt=!cnt!+1 rem ファイルの1行目を飛ばして1行ずつ出力、に加え、とーくんの1,3,4,5番目だけ取り出して(%%c=商品名列)、行頭にファイル名を足す for /f "usebackq tokens=1-5 delims=, skip=1" %%b in ("!TARGET_FILE!") do ( echo !TARGET_FILE!,%%b,%%d,%%e,%%f>>"!FILE_NAME!" ) ) endlocal
材料としているcsvファイルの内容例
商品コード | 商品名 | 購入件数(件) | 数量(個) | 金額 |
---|---|---|---|---|
18858 | "いろいろな 文字列" | 4 | 5 | 47520 |
18617 | "不定形の文字列" | 4 | 4 | 26781 |
現時点で得られているまとめ用ファイルの例
集計日 | 商品コード | 購入件数(件) | 数量(個) | 金額 |
---|---|---|---|---|
20220401.csv | 18858 | 4 | 5 | 47520 |
20220401.csv | 18617 | 4 | 4 | 26781 |
20220401.csv | 18882 | 3 | 3 | 26049 |
20220402.csv | 16363 | 1 | 1 | 4752 |
20220402.csv | 501 | 1 | 2 | 3888 |
20220403.csv | 17829 | 1 | 1 | 6156 |
本当に欲しいまとめ用ファイル
集計日 | 商品コード | 購入件数(件) | 数量(個) | 金額 |
---|---|---|---|---|
20220401 | 18858 | 4 | 5 | 47520 |
20220401 | 18617 | 4 | 4 | 26781 |
20220401 | 18882 | 3 | 3 | 26049 |
20220402 | 16363 | 1 | 1 | 4752 |
20220402 | 501 | 1 | 2 | 3888 |
20220403 | 17829 | 1 | 1 | 6156 |
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/02 00:03
2022/05/02 00:19