アプリ版:「スタンプのみでお礼する」機能のリリースについて

フォルダ内に複数のファイルが存在しており、その中でタイムスタンプが一番最新のファイルをコピーしたいと考えているのですが、ファイル同士のタイムスタンプを比較する方法が見つけられませんでした。どなたかご存知の方がいらっしゃいましたら、教えて頂けませんか?

A 回答 (3件)

フォルダの内の最新のファイルを調べるんだったら、



1.ファイルを順番に順番に列挙していく(Filesコレクション)
2.最初のファイルのファイル名とタイムスタンプを退避
3.次のファイルのタイムスタンプと、退避したファイルのタイムスタンプを比較。新しいファイルだったらファイル名とタイムスタンプを退避しなおす。

以降3の繰り返し。

比較する方法ってのはIfでですけど、Ifがわからないわけじゃないですよね?

この回答への補足

>taka_tetsuさん
レスありがとうございます。

>比較する方法ってのはIfでですけど、Ifがわからないわけじゃないですよね?
スクリプトの条件分岐は分かります。^^

>3.次のファイルのタイムスタンプと、退避したファイルのタイムスタンプを比較。
タイムスタンプを確認するのは「DateLastModified」プロパティを利用すればいいんでしょうか?
ファイル同士のタイムスタンプを比較する場合、どのようにして新しいか、古いかを区別するのかが分かりませんでした。よろしければ、比較するスクリプトを教えて頂けませんでしょうか?

補足日時:2005/05/19 23:23
    • good
    • 0

>ファイル同士のタイムスタンプを比較する場合、どのようにして新しいか、古いかを区別するのかが分かりませんでした。



ただIfで大小を比較するだけですが(^^;;;
日時なんですから。


>よろしければ、比較するスクリプトを教えて頂けませんでしょうか?

ですから、「比較するスクリプト」って言っちゃうと、Ifの一行なんですって(^^;;


C:\の中で一番タイムスタンプが新しいファイルの名前とタイムスタンプを表示するVBScriptです。

Dim objFS
Set objFS = CreateObject("Scripting.FileSystemObject")

Dim objFolder
Set objFolder = objFS.GetFolder("C:\")

Dim strNewFileName
Dim dtmMostNewTimeStamp

'ファイルを列挙
For Each objFile In objFolder.Files

If dtmMostNewTimeStamp < objFile.DateLastModified Then
dtmMostNewTimeStamp = objFile.DateLastModified
strNewFileName = objFile.Name
End If

Next

WScript.Echo strNewFileName
WScript.Echo dtmMostNewTimeStamp

この回答への補足

ご丁寧にスクリプトを記述して頂き、ありがとうございました。
タイムスタンプの新旧の比較を、単純に大小で判別出来るのには気が付きませんでした。^^

教えて頂いたスクリプトを参考にして、タイムスタンプが一番新しいファイルと、その次にタイムスタンプの新しいファイルを取り出したいと考えているのですが、


For Each objFile In objFolder.Files

If objFile <> strNewFileName Then '(1)
If dtmMostNewTimeStamp < objFile.DateLastModified Then
dtmMostNewTimeStamp = objFile.DateLastModified
strNewFileName2 = objFile.Name
End If
End if

Next

(1)のような条件分岐を追加したスクリプトを加えて、先に取り出した1番タイムスタンプが新しいファイルを除外して、次に新しいファイルを代入させようと考えているのですが、strNewFileName2にもstrNewFileNameと同じファイルが代入されてしまい取り出せずに困っています。
本来の質問からは少しずれてしまうのですが、もし宜しければ教えて頂けませんでしょうか?

補足日時:2005/05/20 21:46
    • good
    • 0

私が書いたスクリプトの後ろにkhaii21さんが書き足されたんですよね?



不思議ですねぇ。本当に書かれたものそのままなら、
>strNewFileName2 = objFile.Name

この行通るはず無いんですけど。
strNewFileName2、空のままのはずです。

通らない理由は、
>If dtmMostNewTimeStamp < objFile.DateLastModified Then

です。dtmMostNewTimeStampより新しいファイル、strNewFileName以外であるわけ無いですよね。


と、khaii21さんが書かれたスクリプトについて解説してみましたが、2番目に新しいファイルを見つけるのに列挙しなおす必要なんて無いですよ(^^;;;


私が書いたスクリプト、ちょっと直すだけで1番目と2番目両方取れます。

Dim strNewFileName
Dim dtmMostNewTimeStamp

Dim strNewFileName2
Dim dtmMostNewTimeStamp2

'ファイルを列挙
For Each objFile In objFolder.Files

If dtmMostNewTimeStamp < objFile.DateLastModified Then

dtmMostNewTimeStamp2 = dtmMostNewTimeStamp
strNewFileName2 = strNewFileName

dtmMostNewTimeStamp = objFile.DateLastModified
strNewFileName = objFile.Name

ElseIf dtmMostNewTimeStamp2 < objFile.DateLastModified Then

dtmMostNewTimeStamp2 = objFile.DateLastModified
strNewFileName2 = objFile.Name

End If

Next

考え方は、列挙したファイルが今までで一番新しかったら
・前の1番目→2番目
・列挙されたファイル→1番目
に、

1番目より古いけど、それまでの2番目よりは新しければ、

・前の1番目→そのまま1番目
・列挙されたファイル→2番目

になりますよね。
    • good
    • 0
この回答へのお礼

>taka_tetsuさん

本当に丁寧に教えて頂き、ありがとう御座いました。
まだまだ人に頼る所が多く、どうしても「教えて君」になってしまい申し訳無いと思いますが、1つを教えてもらって何倍にでも応用出来るようにスキルアップを図りたいと考えています。本当に助かりました。

お礼日時:2005/05/21 02:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!