• ベストアンサー

バッチファイル作成で困っています。こんな事出来ますか?

・仕事で初めてバッチファイルを作っていますが、CSVファイルの連番が思っていたのと違う為出来なくて困っています。どうか教えてください。 作業内容を記します。 〔内容〕  ・Logフォルダー内に今300件以上のCSVファイルが有ります。  (Logフォルダーの名前は日付で毎日0:00に更新され、yyyymmdd形式です。例:今日が6/22だと「20060623」)  ・Logフォルダー内のCSVファイルの名前はCL増設時以下の規則で付いています。(今後CL数が増えればCSVファイルの数も増加します。) CL0001  CL0010  CL0020 ・・・  ↓    ↓    ↓ CL0009  CL0019  CL0029 ・・・ CL000a  CL001a  CL002a ・・・  ↓    ↓    ↓ CL000f  CL001f  CL002f ・・・  ・0:00以降、上記CSVを全て1つのCSVファイルに結合し、名前を日付から1を引いて昨日の日付(例:「20060622」に変更して汎用Hostに0:30分にFTPで送ります。 ・昨夜DOS系のサイトを必死で検索し恥ずかしいのですが、以下の様な バッチを始めて作成したのですが、CSVファイルが16進で付いているのを知らずCL0001~CL0999で作ってしまいました。現在、a~fのところが自分ではどうして良いか全く分かりません。又、Error処理が検索サイトの解説を読んでも旨く出来ません。 〔バッチ〕 @echo off setlocal set da=%date:~0,4%%date:~5,2%%date:~8,2% set /a x=%da%-1 d: cd "D:\data\CL_Logs\Logs\%x% for /l %%n in (1 1 9) do type JL000%%n.csv >> %x%.csv for /l %%n in (10 1 99) do type JL00%%n.csv >> %x%.csv for /l %%n in (100 1 999) do type JL0%%n.csv >> %x%.csv ftp -s:c:\Logs_ftp.txt >> ftp.log endlocal ・CSVファイルのの「CLxxxx」の番号はCLが無くなると欠番になりますが、その処理は必要無いと思っています。 どうか宜しくお願いいたします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1>今回求めたいのはcsvファイルの名前の結合ではなく、フォルダー内のCSVファイルの中身を全て1つのCSVファイルにしたいのです それは、わかっています。 dir /ON /B JL*.csv >filelist.dat FOR /F "delims=" %%i in (filelist.dat) do type "%%i" >>%x%.csv del filelist.dat の様にすることで、ファイル名のリストを整列して その順番で結合することができます。 #1でも言っているようにファイル名のリストを作成するのは、 あくまで作業のために作るということです。 言葉が足りずにすみません。

yazaemon
質問者

お礼

・今回の回答でやっと分かりました本当に有難ございました。 FOR /F "delims=" %%i in (filelist.dat) do type "%%i" >>%x%.csv この方法して見たかったのでWebで見て色々書いて見ましたがAll NGでした。これで少しForが分かった様に思います。(独りよがり・・・) ・これで月曜日に間に合いますし、この式だと環境の変化について行けそうです。本当に有難うございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

noname#27709
noname#27709
回答No.4

私もBLUEPIXYさんのおっしゃる方法がとてもよいと思いますが・・・。 ◎順番に保証されなくてよいのなら・・・ -- @echo off set YYYYMMDD=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2% set /a YYYYMMDD2=%YYYYMMDD% - 1 set TARGET_DIR=D:\data\CL_Logs\Logs\%YYYYMMDD2% cd /d %TARGET_DIR% type JL????.csv >> \%YYYYMMDD2%.csv ftp -s:c:\Logs_ftp.txt >> ftp.log -- では、ダメでしょうか? ◎順番の保証が必要なら、 -- @echo off setlocal set YYYYMMDD=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2% set /a YYYYMMDD2=%YYYYMMDD% - 1 set TARGET_DIR=D:\data\CL_Logs\Logs\%YYYYMMDD2% set TEMP_FILE=filelist.txt cd /d %TARGET_DIR% dir /B /ON *.csv > %TEMP_FILE% for /f "tokens=1" %%i IN (%TEMP_FILE%) DO ( echo type %%i >> %YYYYMMDD2%.csv ) ftp -s:c:\Logs_ftp.txt >> ftp.log -- でどうでしょうか?

yazaemon
質問者

お礼

・有難うございます。教えて頂いたとおりすると見事にFTPできました。 for /f "tokens=1" %%i IN (%TEMP_FILE%) DO ( echo type %%i >> %YYYYMMDD2%.csv は全く気づきませんでした。  本当に有難うございました。

すると、全ての回答が全文表示されます。
回答No.3

C:\>for /r c:\windows %n in (*.txt) do cmd /c "copy c:\s.txt+%n" このコマンドでc:\windows 下の*.txtファイルの付加することができます。先にc:\s.txtを作成しておいてください 参考してください

yazaemon
質問者

お礼

・有難うございます。こんな方法があるとは思いませんでした。有難うございました。

すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

全部結合するなら、分けて処理する必要は無いような気がします。 ファイルの結合の順番が関係あるなら、 dir /B /ON *.csv >filelist.txt みたいな作業ファイルを最初に作って ファイルから処理リストを得るようにして 最後に作業ファイルを消すというような感じでいいんじゃないでしょうか

yazaemon
質問者

補足

早速の回答有難うございました。質問の仕方が悪かった様なので補足します。 ・今回求めたいのはcsvファイルの名前の結合ではなく、フォルダー内のCSVファイルの中身を全て1つのCSVファイルにしたいのです。故に私の拙いバッチでもTYPEコマンドでCSVを表示しその内容を新しい1つの共通の名前のCSVに結合しています。すみませんがご指導宜しくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A