• ベストアンサー

Windowsバッチでできるのかな・・・

Windowsバッチで質問させてください。 バッチで処理するCSVファイルがありまして、 ファイル名は「File_20091108」という感じです。 処理の対象となるのは、バッチ実行日より1日前以前のファイル、 例えば、今日11月8日の処理対象は11月7日以前のファイルに なります。1日前のファイルだけでなく、それ以前のファイルも 対象となるので、ここら辺で苦戦しています。 どなたかご教示くださますでしょうか・・・。 よろしくお願い致します。

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

  • ベストアンサー
  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.1

:start @echo off for /f "delims=" %%i in ('dir x:\*.csv /b /s') do ( if "%%~ni" lss "File_%date:~2,4%%date:~7,2%%date:~10,2%" ( echo "%%~nxi" echo "%%i" echo . ) ) :end 解説: 1行目、10行目:スタートと終了を意味する単なるラベルなので、無くてもOK 2行目:コマンド表示の抑止 3行目:"in"の後の()内'dir x:\*.csv /b /s'を実行して、通常、画面に表示される情報を一つずつ変数%%iにセットします。"x:"の部分をファイルが実際に存在するドライブレターに変更してください。 4行目:変数%%iには、ファイルのフルパス名(例えば、x:\WINDOWS|TEMP\File_20091108.csv)が入っているので、"%%~ni"で"File_20091108"の部分だけを取り出し、PCの内蔵時計の日付から作成したファイル名("File_%date:~2,4%%date:~7,2%%date:~10,2%"の部分)と大小を比較しています。"lss"は「より小さい」の意味です。 5行目~7行目:この回答では、該当するファイルのファイル名とフルパス名を表示しているだけです。ここに実際に行う処理を記述します("echo"の部分を実際のコマンドに置き換えてください。)複数の処理を行えるように、3行目の"for"コマンド、4行目の"if"コマンドを()を使用した複数行記述にしてあります。 8行目:4行目の"if"文の終了の意味の"〉" 9行目:3行目の"for"分の終了の意味の")" 先日、"for"文を使った似たような回答をしたばかりですので、そちらも参考にしてください。 http://okwave.jp/qa5387178.html

Rook09
質問者

お礼

お返事おくれてすみません。わかりやすい内容でとてもたすかりました。本当にありがとうございます!

その他の回答 (1)

回答No.2

VBScript なら、、、 Const dirPath = "E:\datafile" Const targetExtension = "csv" Dim fso Set fso = WScript.CreateObject("Scripting.FileSystemObject") ' 指定したフォルダ内のすべてのファイルをコレクションとして取得 Dim dataFiles Set dataFiles = fso.GetFolder(dirPath).Files ' コレクション内のファイルを転がす Dim aFile For Each aFile In dataFiles ' 拡張子が Const targetExtension と合っているもののみを対象とする。 ' LCase で小文字にしてから比較している。 If LCase(fso.GetExtensionName(aFile.Name)) = targetExtension Then ' ファイル名の年月日の部分を抜き出す。 ' ファイル名から拡張子を除き、右から 8文字分を抜き出している。 Dim dateFromTitle dateFromTitle = Right( fso.GetBaseName(aFile.Name), 8) ' 今日の日付よりも古いものだけを処理する。 ' 今日の日付は Date() で今日の日付を取得し、日付区切り文字のスラッシュを削除している。 If dateFromTitle < Replace(Date(), "/", "") Then ' あとは煮るなり焼くなり WScript.Echo aFile.Path End If End If Next 今日の日付はもっと丁寧に加工してやらないといかんけどね。 "2009年11月8日" とか返ってくる PC もあるし。

Rook09
質問者

お礼

確かにVBScriptを用いれば、いろいろ拡張性がありますね! ありがとうございます。とても参考になりました!

関連するQ&A

専門家に質問してみよう