![](/img/trans.png)
[英]In VBScript, how do I manage “Scripting.FileSystemObjects” like objFSO and objFolder for multiple folders/files?
[英]How do I get the supplied VBScript to copy files for my folders?
我想找到最新的文件夾,然后使用vbsscript將文件復制到目標文件夾。
這是在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
行后Set FindMostRecent = mrf
嘗試了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
代碼的作用是:
FindMostRecent()
是一個遞歸(即自引用)函數,該函數返回給定根文件夾下的文件夾樹中最近修改的文件夾。
如果給定的文件夾不包含子文件夾,則當前文件夾是最新文件夾,因此該功能通過設置mrf = fldr
來默認為當前文件夾。
如果文件夾包含子文件夾,則每個子文件夾樹中的最新文件夾由遞歸調用( FindMostRecent(sf)
)確定。 將該文件夾( mrsf
)中的“最后修改”日期與當前最新文件夾( mrf
)中的“最后修改”日期進行mrf
。 如果mrsf
比mrf
,則將后者替換為前者。
檢查每個現有子文件夾(如果有)后, mrf
包含fldr
下文件夾樹中的最新文件夾,然后將其返回給調用方。
對於錯誤,請嘗試向該函數添加一些調試代碼:
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
樹(可能是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 & "\"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.