こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

Windowsバッチで質問させてください。
バッチで処理するCSVファイルがありまして、
ファイル名は「File_20091108」という感じです。

処理の対象となるのは、バッチ実行日より1日前以前のファイル、
例えば、今日11月8日の処理対象は11月7日以前のファイルに
なります。1日前のファイルだけでなく、それ以前のファイルも
対象となるので、ここら辺で苦戦しています。

どなたかご教示くださますでしょうか・・・。
よろしくお願い致します。

投稿日時 - 2009-11-08 19:14:50

QNo.5431927

すぐに回答ほしいです

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

: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

投稿日時 - 2009-11-08 20:57:15

お礼

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

投稿日時 - 2009-11-18 21:09:21

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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 もあるし。

投稿日時 - 2009-11-08 21:35:03

お礼

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

投稿日時 - 2009-11-18 21:11:04

あなたにオススメの質問