3

多くのユーザーのログオン スクリプトの一部として使用されるはずのこのスクリプトを設計しようとしています。そして、このスクリプトは、基本的に、宛先フォルダーがソースフォルダーとまったく同じコンテンツを持っていることを確認するだけなので、基本的にソースフォルダーと宛先フォルダーを取ることになっています。ただし、コピー元ファイルの datemodified スタンプがコピー先ファイルよりも新しい場合にのみコピーしてください。

私はこの基本的な疑似コードを考えていて、これが有効で基本的にしっかりしていることを確認しようとしています。

Dim strSourceFolder, strDestFolder
strSourceFolder = "C:\Users\User\SourceFolder\"
strDestFolder = "C:\Users\User\DestFolder\"

For each file in StrSourceFolder
     ReplaceIfNewer (file, strDestFolder)
Next

Sub ReplaceIfNewer (SourceFile, DestFolder)

    Dim DateModifiedSourceFile, DateModifiedDestFile
    DateModifiedSourceFile = SourceFile.DateModified()
    DateModifiedDestFile = DestFolder & "\" & SourceFile.DateModified()

    If DateModifiedSourceFile < DateModifiedDestFile
        Copy SourceFile to SourceFolder
    End if

End Sub

これは機能しますか?どうやってそれができるのかよくわかりませんが、おそらく一日中それを理解するのに費やすことができます. しかし、ここの人々は一般的に非常に頭が良いので、あなたの助けがあれば、時間は大幅に短縮されます :)

4

2 に答える 2

3

あなたのアルゴリズムは良さそうです。実際には、FileSystemObject を使用してファイルを取得し、それぞれの DateLastModified プロパティを取得する必要があります。2 つの日付で DateDiff を実行して、どちらが早いかを比較できます。

DevGuruからのわずかに変更された例:

Dim filesys,demofile, date1, date2
Set filesys = CreateObject("Scripting.FileSystemObject")
Set demofile = filesys.GetFile("filename1")
date1 = demofile.DateLastModified
demofile = filesys.GetFile("filename2")
date2 = demofile.DateLastModified

If DateDiff("d", date1, date2) > 0 Then
    'date2 is more recent than date1, comparison by "day" ' ** Improvement **
End If

編集: URL のスペルを間違えました。


改善 コメントの「date1」と「date2」が入れ替わっています。MSDN ドキュメントには、次のように記載されています。date1 が date2 より後の時刻を参照している場合、DateDiff 関数は負の数を返します。 http://msdn.microsoft.com/en-us/library/xhtyw595(v=vs.84).aspx

于 2010-05-14T08:06:26.980 に答える
1

あなたのコードは合理的に見えます。読み取り専用ファイルなどに注意してください。

を使用FileSystemObjectして実際のファイル操作を行うことができます。以下を参照してください。

http://msdn.microsoft.com/en-us/library/6kxy1a51%28VS.85%29.aspx

于 2010-05-14T08:00:47.883 に答える