我想找到最新的文件夹,并使用vbsscript将文件复制到目标文件夹。
这已完成here on SO,但所提供的解决方案对我不起作用。
Ansgar Wiechers提供了此代码。
rootFolder = "C:\root"
dstFolder = "C:\dst"
Set fso = CreateObject("Scripting.FileSystemObject")
Set mostRecent = FindMostRecent(fso.GetFolder(rootFolder))
For Each f In mostRecent
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
将第一行更改为rootFolder = "D:\"
,第二行更改为
dstFolder = "C:\"
,我收到以下错误:
Script: C:\Users\xxx\Desktop\new 456 82.vbs
Line: 14
Char: 5
Error: Object required: 'FindMostRecent(...)'
Code: 800A01A8
Source: Microsoft VBScript runtime error
将root更改为D:\Files
,将目标更改为C:\test
会产生:
Script: C:\Users\Bradley\Desktop\new 456 8.vbs
Line: 7
Char: 1
Error: Object doesn't support this property or method
Code: 800A01B6
Source: Microsoft VBScript runtime error
我还没有在同一个帖子中找到copy
命令:
cls set knownpath=C:\a for /f "delims=" %%a in ('dir /ad /od /b "%knownpath%"') do ( set name=%%a ) copy "%knownpath%\%name%" "C:\b"
我不知道脚本在哪里放置命令。我在Set FindMostRecent = mrf
之后尝试了一个新行,但是我收到了另一个错误。在End
函数之后尝试,并获得另一个错误。
我需要把它分解为我,好像我是一个五岁的孩子。
编辑:确定现在主代码正在运行我正在尝试插入复制命令。这是我到目前为止所尝试的,它给了我错误。
rootFolder = "D:\test"
dstFolder = "D:\test2"
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
cls set knownpath="D:\test" for /f "delims=" %%a in ('dir /ad /od /b "%knownpath%"') do ( set name=%%a ) copy "%knownpath%\%name%" "D:\test2"
EDIT2:
rootFolder = "D:\Files"
dstFolder = "D:\test"
Set fso = CreateObject("Scripting.FileSystemObject")
Set mostRecent = FindMostRecent(fso.GetFolder(rootFolder))
mostRecent.Copy dstFolder
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
答案 0 :(得分:1)
代码的作用:
FindMostRecent()
是一个递归(即自引用)函数,它返回给定根文件夹下文件夹树中最近修改过的文件夹。
如果给定的文件夹不包含子文件夹,则当前文件夹是最新的文件夹,因此该功能通过设置mrf = fldr
默认为当前文件夹。
如果文件夹包含子文件夹,则每个子文件夹树中的最新文件夹由递归调用(FindMostRecent(sf)
)确定。将该文件夹(mrsf
)中的“上次修改”日期与当前最新文件夹(mrf
)的“上次修改”日期进行比较。如果mrsf
比mrf
更新,则后者将替换为前者。
当检查每个现有子文件夹(如果有)时,mrf
包含fldr
下文件夹树中最新的文件夹,然后返回给调用者。
对于错误,请尝试在函数中添加一些调试代码:
Function FindMostRecent(fldr)
Set mrf = fldr
WScript.Echo "TypeName(mrf) = " & TypeName(mrf)
WScript.Echo "mrf = " & mrf.Name
WScript.Echo mrf.Path
For Each sf In fldr.SubFolders
Set mrsf = FindMostRecent(sf)
On Error Resume Next
If mrsf.DateLastModified > mrf.DateLastModified Then Set mrf = mrsf
If Err Then
WScript.Echo "TypeName(mrsf) = " & TypeName(mrsf)
WScript.Echo "mrsf = " & mrsf.Name
End If
On Error Goto 0
Next
Set FindMostRecent = mrf
End Function
这应该可以帮助您追踪错误发生的位置。
答案 1 :(得分:0)
以下内容会将最近修改过的文件夹从rootFolder
树(可能是rootFolder
本身!)复制到dstFolder
:
rootFolder = "D:\Files"
dstFolder = "D:\test"
Set fso = CreateObject("Scripting.FileSystemObject")
Set mostRecent = FindMostRecent(fso.GetFolder(rootFolder))
mostRecent.Copy dstFolder
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
请注意,对于dstFolder = "D:\test"
,说明mostRecent.Copy dstFolder
会将mostRecent
的内容复制到目标文件夹:
Before:
D:\
+-Files\
| +-foo.txt
| `-bar\
`-test\
After:
D:\
+-Files\
| +-foo.txt
| `-bar\
`-test\
+-foo.txt
`-bar\
如果要复制整个mostRecent
文件夹:
Before:
D:\
+-Files\
| +-foo.txt
| `-bar\
`-test\
After:
D:\
+-Files\
| +-foo.txt
| `-bar\
`-test\
`-Files\
+-foo.txt
`-bar\
目的地必须有一个反斜杠:
mostRecent.Copy dstFolder & "\"