【问题标题】:VB Script to move files around based on date changedVB脚本根据更改日期移动文件
【发布时间】:2019-03-30 15:17:28
【问题描述】:

我正在寻找编写一个 VB 脚本来整理文件夹。规则是:

  • 检查今天是否有任何文件被更改
  • 如果今天至少更改了一个文件,请将 2 天前最后更改的所有文件移至另一个文件夹

这是我目前所拥有的:

strFolder = "c:\testdelete"
objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strFolder)
Set colFiles = objFolder.Files
For Each objFile In colFiles
  If DateDiff("N",objFile.DateLastModified,Now()) > 4320 Then
    objFSO.DeleteFile(objFile),True  End if  Next

但这不起作用。

【问题讨论】:

  • 添加任何代码都会很有帮助。提出问题而不尝试解决问题并不是一个好政策:stackoverflow.com/questions/how-to-ask
  • 我的错。这是我必须开始的。它将删除文件夹中比指定日期更早的文件,但我不是 VBS 人,才刚刚开始。 strFolder = "c:\testdelete" : Rem change the path Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder(strFolder) Set colFiles = objFolder.Files For Each objFile In colFiles If DateDiff("N",objFile.DateLastModified,Now()) > 4320 Then objFSO.DeleteFile(objFile),True End if Next
  • 调试应用程序并查看是否相应地填充了值。您是否有任何错误,哪一行与您的期望不符。是objFSOcolFiles。逐行检查您的第一个问题是在哪里遇到的。
  • 上面的代码可以删除早于 4320 分钟的文件,但我需要包含一个条件,首先检查文件夹中是否有日期为“今天”的文件,然后移动早于 2 天的文件到另一个文件夹。我不知道如何包含条件语句或移动文件与删除文件的正确语法。非常感谢您的帮助。

标签: file-io vbscript


【解决方案1】:

同时遍历文件夹中的文件

  • 建立至少 2 天前修改的文件列表,并且
  • 检查文件今天是否被修改。

这样的事情应该可以工作:

Set fso = CreateObject("Scripting.FileSystemObject")

Set oldFiles = CreateObject("System.Collections.ArrayList")

today     = Date
threshold = Date - 1

fileModifiedToday = False
For Each f In fso.GetFolder("C:\some\folder").Files
  If f.DateLastModified >= today Then fileModifiedToday = True
  If f.DateLastModified < threshold Then oldFiles.Add f
Next

If fileModifiedToday Then
  For Each f In oldFiles
    f.Move "C:\other\folder\"
  Next
End If

【讨论】:

  • +1 用于解决问题(不要玩弄 OT 的错误代码)、&gt;=f.Move。一个尼特你:你能不能为 volatile Date 花费一个变量并在顶部附近初始化一次?
  • +1 Ansgar,很酷的东西,我喜欢阅读你的代码,它很有创意。 “......玩弄 OT 被误导的代码”——我更认为,将他们的代码重新调整为他们理解的内容,显然这段代码是从另一个位置复制和粘贴的,但为什么要教他们重新发明轮子而不是仅仅给他们需要的下一步。我一直将其视为辅助学习。每个人都有自己的:)
【解决方案2】:

所以要比较文件的日期和当前日期,您可以使用DateValue() 函数,它只返回DateTime 变量的日期。然后您可以使用 MoveFile 命令,其工作方式类似于 objFSO.MoveFile(FileObject, DestinationFolder)

Dim strFolder, Dest
On Error Resume Next 'Move to manual error handling. 
strFolder = "c:\testdelete"
Dest = "C:\testmove"
Dim objFSO, objFolder, colFiles, objFile
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.GetFolder(strFolder)  
Set colFiles = objFolder.Files  
For Each objFile In colFiles  
  If DateValue(objFile.DateLastModified) = DateValue(Now) Then
    objFSO.MoveFile(objFile, Dest)
    if err.number <> 0 then msgbox "Destination does not exist"
    err.clear
  ElseIf DateDiff("N",objFile.DateLastModified,Now()) > 4320 Then       
    objFSO.DeleteFile(objFile,True)
    if err.number <> 0 then msgbox "Unable to delete file"
    err.clear
  End if  
Next 

【讨论】:

    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多