【问题标题】:Beginner VBscript: script that zips log files初学者VBscript:压缩日志文件的脚本
【发布时间】:2012-06-28 15:43:22
【问题描述】:

我的脚本实际上没有生成 zip 文件时遇到问题。当我使用设置为这样的路径测试脚本时:

C:\Users\Bob\Desktop\Folder1\Folder2

如果文件夹 1 中超过 7 天的测试日志文件将被删除,并被压缩并移动到文件夹 2,它将运行良好。它将生成包含所有日志文件的压缩文件,并具有正确的命名集。

所以我知道至少脚本的逻辑适用于此。

我的问题是我需要这个脚本来检查机器上的安全日志并删除任何超过 7 天的内容,然后将剩下的任何内容压缩并发送到已安装的共享驱动器。当我将路径更改为:

C:\Windows\System32\Config(日志所在的位置)

它仍会删除所有超过 7 天的日志文件,但不会生成包含任何剩余内容的 zip 文件。即使脚本没有产生错误,它什么也不做。我一直在试图解决这个问题,但我的代码没有运气。如果有人可以看看我的经历并让我知道我在哪里误入歧途,那将非常有帮助。

提前谢谢你,脚本在下面找到。

'先读 '---------------------------------------------------- ------------------------------------------

'第 14-53 行删除所有超过 7 天的日志文件。更改“iDaysOld =”中的值将更改保留或删除文件的时间范围。 '如果文件不需要删除,这部分脚本可以被取出,存档/移动功能仍然完好

'第 57-102 行包含压缩日志文件并将它们发送到新文件夹的功能。压缩文件以 localhost 命名,并在文件名后附加日期/时间戳。

'---------------------------------------------- --------------------------------------------------------

Option Explicit

Dim oFSO, oFolder, sDirectoryPath 
Dim oFileCollection, oFile, sDir 
Dim iDaysOld 

' 指定要清除旧文件的目录路径

sDirectoryPath = "C:\Windows\System32\config"

' 指定要删除的旧文件的天数

iDaysOld = 7

Set oFSO = CreateObject("Scripting.FileSystemObject") 
Set oFolder = oFSO.GetFolder(sDirectoryPath) 
Set oFileCollection = oFolder.Files 

For each oFile in oFileCollection

'指定要删除的文件的扩展名 '以及文件扩展名中带有字符数的数字

If LCase(oFSO.GetExtensionName(oFile.Name)) = "log" Then

    If oFile.DateLastModified < (Date() - iDaysOld) Then 
    oFile.Delete(True) 
    End If 

End If   
Next 



Set oFSO = Nothing 
Set oFolder = Nothing 
Set oFileCollection = Nothing 
Set oFile = Nothing 



WScript.Echo "Press to start zipping log files."

Dim objFile, objPath, objFolder, Command, PathLogs, RetVal
Dim objFSO: Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objShell: Set objShell = CreateObject("WScript.Shell")
Dim d : d = Date() 
Dim dateStr : dateStr = Year(d) & "-" & Right("00" & Month(d), 2) & "-" & Right("00" &      Day(d), 2)
Dim t : t = Time()
Dim timeStr: timeStr = Hour(t) & "-" & Right("00" & Minute(t), 2) & "-" & Right("00" &    Second(t), 2)

'日志所在的路径

PathLogs = "C:\Windows\System32\config"  

'遍历日志并压缩

Set objPath = objFSO.GetFolder(PathLogs)
For Each objFile In objPath.Files




If (LCase(objFSO.GetExtensionName(objFile)) = "log") Then

    ' zip files

Command = """C:\Program Files\7-zip\7z.exe"" a " & PathLogs & "%computername%" & "-" & dateStr & "-" & timeStr & ".zip " & PathLogs & objFile.Name 


RetVal = objShell.Run(Command,0,true)

End If

Next

WScript.Echo "Zip Successful."

 WScript.Echo "Now Moving Zipped Files into Archived Folder"

    'move files

Set objFSO = CreateObject("Scripting.FilesystemObject")
objFSO.MoveFile "C:\Windows\System32\config\*.zip" , "C:\Testscripts\testfolder\Archived"

WScript.Echo "Move Successful."

【问题讨论】:

  • 您可能遇到了 UAC 限制,为什么不尝试在另一个文件夹(c:\windows 之外)创建 zip 文件,看看那里的文件是否创建正常?
  • 我一开始就是这么想的,但它通常不会返回权限错误吗?我更改了注册表以向 vbs 文件添加“以管理员身份运行”选项并尝试了该操作,但仍然没有运气。现在我只是让它在路径中寻找 .log 文件,然后告诉它压缩它找到的任何文件。它默认将 zip 压缩到之前在其中找到任何 .log 文件的文件夹。我不确定让它在别处创建 zip 文件的语法
  • 像这样使用 -o ... 7z x archive.zip -oC:\Doc
  • 试过这个。我不断收到大量访问被拒绝的提示,这些提示我什至没有告诉 7zip 查看。例如 Users\ReportServer$SQLEXPRESS\Templates:访问被拒绝。当我输入的命令是 C:\"Program Files\7-zip\7z.exe" a c:\testscripts\asdf\.log -oC:\testscripts\asdf2 有什么想法吗??

标签: vbscript zip logfiles


【解决方案1】:

我可能会尝试回显 7zip 命令行,检查它是否正确,然后从脚本运行所在的同一位置手动运行它。当您看到它时,它可能看起来有问题,或者 7zip 可能会给您一条消息以指示正在发生的事情。

【讨论】:

  • 当我在命令行运行它时:C:\>"\Program Files\7-Zip\7z.exe" a c:\Windows\Systems32\config\!*.log 我得到大量访问被拒绝返回一堆不同文件的值。然后一旦它通过了它们,它会说“警告找不到 471 个文件”“错误 7-Zip 无法打开文件 C:\Windows\System32\config\!*.log 文件名、目录名或卷标语法是不正确。系统错误:未指定的错误。所以我认为这意味着这是一个 UAC 问题?
  • 感叹号应该是通配符还是文件名的第一个字符?不确定它是否会导致问题。
猜你喜欢
  • 1970-01-01
  • 2015-08-15
  • 2010-09-06
  • 1970-01-01
  • 2022-11-14
  • 2013-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多