簡體   English   中英

如何獲得提供的VBScript復制文件夾的文件?

[英]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 如果mrsfmrf ,則將后者替換為前者。

檢查每個現有子文件夾(如果有)后, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM