2012-06-28 21 views
0

我遇到了問題,而我的腳本實際上並沒有生成zip文件。當我測試的腳本設置像這樣的路徑:初學VBscript:壓縮日誌文件的腳本

C:\用戶\鮑勃\桌面\ Folder1中\文件夾2

在文件夾1測試日誌文件,如果超過7天被刪除,並被壓縮並移動到文件夾2,它將運行得很好。它將生成包含所有日誌文件的壓縮文件,並設置適當的命名。

所以我知道至少腳本的邏輯適用於此。

我的問題是我需要這個腳本通過計算機上的安全日誌並刪除任何超過7天的日誌,然後將剩下的任何文件壓縮併發送到安裝的共享驅動器。當我改變路徑是這樣的:

C:\ WINDOWS \ system32 \設置(如日誌位於)

它仍然會刪除所有日誌文件超過7天,但它不會產生與任何剩下的zip文件。即使腳本沒有產生任何錯誤,它也不做任何事情。我一直在試圖弄清楚這一點,但沒有運氣過去我的代碼。如果任何人都可以看看我有什麼,並讓我知道我誤入歧途的地方,這將是非常有幫助的。

預先感謝您,腳本在下面找到。

'READ FIRST '----------------------------------------- -------------------------------------------------

'第14-53行刪除超過7天的任何日誌文件。更改「iDaysOld =」中的值將更改保存或刪除文件的時間範圍。 '如果文件不需要刪除,這部分腳本可以取出並且存檔/移動功能仍然完好

'第57-102行包含壓縮日誌文件並將它們發送到一個新的文件夾。壓縮文件以本地主機命名,日期/時間戳記附加到文件名中。

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

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" 

「循環通過日誌路徑和zip

f文件
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." 
+0

您可能會收到UAC限制,爲什麼不嘗試在另一個文件夾(c:\ windows之外)中創建zip文件以查看文件是否已在此創建? – Rodolfo

+0

這就是我第一次想到的,但通常不會返回特權錯誤?我改變了註冊表添加一個「以管理員身份運行」選項vbs文件,並嘗試過,但仍然沒有運氣。現在我只需要在路徑中查找.log文件,然後告訴它壓縮任何找到的文件。這是默認的zip文件夾,它發現之前的任何.log文件。我不完全確定它在其他地方創建zip文件的語法 – parchambeau

+0

使用-o像這樣... ...'7z x archive.zip -oC:\ Doc' – Rodolfo

回答

0

我可能會嘗試回顯7zip命令行,檢查它看起來是否正確,並從腳本運行的相同位置手動運行它。當你看到它時可能看起來不對,或者7zip可能會給你一條信息來表明發生了什麼。

+0

當我在命令行運行這個:C:\>「\ Program Files \ 7-Zip \ 7z.exe」ac:\ Windows \ Systems32 \ config \!*。log我得到一噸訪問被拒絕返回值在一堆不同的文件上。然後一旦它經歷了所有它說「警告找不到471個文件」錯誤7-Zip無法打開文件C:\ Windows \ System32 \ config \!* .log文件名,目錄名稱或卷標語法是系統錯誤:未指定錯誤所以我認爲這意味着這是一個UAC問題? – parchambeau

+0

感嘆號應該是通配符符號還是文件名的第一個字符?不知道它是否可能導致問題。 – wizzardmr42