最新のフォルダーを見つけて、内部のファイルを宛先フォルダーにコピーする方法を探しています。
質問する
2340 次
2 に答える
0
これを試して:
rootFolder = "C:\root"
dstFolder = "C:\dst"
Set fso = CreateObject("Scripting.FileSystemObject")
Set mostRecent = FindMostRecent(fso.GetFolder(rootFolder))
For Each f In mostRecent.Files
f.Copy fso.BuildPath(dstFolder, f.Name)
Next
Function FindMostRecent(fldr)
Set mrf = fldr
For Each sf In fldr.SubFolders
Set mrsf = FindMostRecent(sf)
If mrsf.DateLastModified > mrf.DateLastModified Then Set mrf = mrsf
Next
Set FindMostRecent = mrf
End Function
于 2013-03-22T19:20:25.313 に答える
0
フォルダーを引数として渡す際に問題が発生したようです。Ansgar Wiechers の例は、ハードコードされた値でそれを行う方法を示しました。簡単にするために、私たちは通常、回答でそれを行います。
rootFolder = "C:\root" 'target folder (where to search)
dstFolder = "C:\dst" 'destionation (where to copy)
しかし、それらを動的に渡したい場合は...
CScript my_task.vbs C:\root C:\dst
...次に、これを .vbs ファイルの先頭に含めます。
With WScript.Arguments
If .Count < 2 Then WScript.Quit(-1)
rootFolder = .Item(0)
dstFolder = .Item(1)
End With
次に、あなたのコメントを読むと、直接のサブフォルダーだけが必要なように思えます。そうであれば、バッチ スクリプトが苦手なので、次のようにします。
tmpFile = "result.txt" 'temp file
With CreateObject("WScript.Shell")
.CurrentDirectory = rootFolder
.Run "CMD /C DIR /A:D /B /O:-D /T:C > " & tmpFile, 0, True
With CreateObject("Scripting.FileSystemObject")
With .OpenTextFile(tmpFile)
mostRecent = .ReadLine
End With
.GetFile(tmpFile).Delete
End With
.CurrentDirectory = mostRecent
.Run "CMD /C COPY *.* " & dstFolder, 0, False
End With
使用される DIR スイッチ:
/A:D = attributes Directory
/B = bare format
/O:-D = order by date/time (newly first)
/O:D = order by date/time (oldest first)
/T:C = sort by Creation
/T:A = sort by Last Access
/T:W = sort by Last Written
于 2013-03-22T22:45:18.510 に答える