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

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

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

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

バッチファイル

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

Q&A

解決済

1回答

1237閲覧

バッチファイル テキスト内に挿入するファイル名に、拡張子を含めたくない

Nucle_cat

総合スコア38

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

バッチファイル

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

0グッド

0クリップ

投稿2022/05/01 22:14

編集2022/05/01 22:42

バッチファイル初心者です(+teratail今回初体験です、失礼あったらすみません)
ネットのサンプルをわからないながら色々ツギハギしており、内容を完璧には理解できていません。
よろしくお願いいたします。


 

やりたいこと

集計日列の".csv"が出てこないようにしたい。

 

わからないこと

set TARGET_FILE=%%a echo TARGET_FILE=!TARGET_FILE!

このへんをどうにかできれば、.csvが付かないのではと思われるが、分割の仕方がわからない。

 

バッチファイルでやってる(はずの)こと

  1. 番号リストリストファイルが格納されてるフォルダの名前を取得して、まとめ用のファイル名に使う
  2. 1ファイル目の処理のときだけ、別ヘッダを出力し、2ファイル目からは1行目をスルーする
  3. 参照元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"いろいろな 文字列"4547520
18617"不定形の文字列"4426781

現時点で得られているまとめ用ファイルの例

集計日商品コード購入件数(件)数量(個)金額
20220401.csv188584547520
20220401.csv186174426781
20220401.csv188823326049
20220402.csv16363114752
20220402.csv501123888
20220403.csv17829116156

本当に欲しいまとめ用ファイル

集計日商品コード購入件数(件)数量(個)金額
20220401188584547520
20220401186174426781
20220401188823326049
2022040216363114752
20220402501123888
2022040317829116156

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

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

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

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

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

guest

回答1

0

ベストアンサー

setlocal enabledelayedexpansion for /f %%a in ('dir /b *.csv') do ( set TARGET_FILE=%%a echo TARGET_FILE=!TARGET_FILE! set TARGET_FILE_PRINT=%%~na echo TARGET_FILE=!TARGET_FILE_PRINT! )

投稿2022/05/01 23:53

itagagaki

総合スコア8402

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

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

Nucle_cat

2022/05/02 00:03

早速ありがとうございます! TARGET_FILE_PRINT ←これが、行頭挿入用の変数、ぽかったので、 いただいた内容をバッチに追記するのに加えて echo !TARGET_FILE!,%%b,%%d,%%e,%%f>>"!FILE_NAME!" も echo !TARGET_FILE_PRINT!,%%b,%%d,%%e,%%f>>"!FILE_NAME!" に書き換えて実行したところ 「私が欲しかったまとめ用ファイル」ができました!!! 完璧です!! これで、1fileずつ手作業で日付を書き足すなんてことをしなくて済みました!感謝いたします!!
Nucle_cat

2022/05/02 00:19

ご回答をいただいてわかったこと(自分メモ) 「パス名の文字列の切り取り」のコマンドで文字列を加工しているから、ファイル名だけとりだせる %%a(今処理してるcsvの名前 ex. 20220401.csv )  を ~n(コマンド n:ファイル名だけ) で切り取り処理してるから、結果が 20220401 になる…はず?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問