2013-10-21 50 views
0

我有這個工作之前就好了,除了得到一個錯誤,如果其中一個文件夾不存在,所以我試圖修復它。搜索了一段時間(儘可能多地在工作中)尋找解決方案,並嘗試了不同的方法,但仍然沒有運氣,我的IT門票在工作中堆積如山,lol,woohoo。感謝您提供的任何幫助。在第60行第60個字符上出現語法錯誤,再次感謝。VBScript多個文件夾檢查是否語句

Option Explicit 
Dim objFSO, Folder1, Folder2, Folder3, zipFile 
Dim ShellApp, zip, oFile, CurDate, MacAdd, objWMIService 
Dim MyTarget, MyHex, MyBinary, i, strComputer, objItem, FormatMAC 
Dim oShell, oCTF, CurDir, scriptPath, oRegEx, colItems 
Dim FoldPath1, FoldPath2, FoldPath3, foldPathArray 
Const FOF_SIMPLEPROGRESS = 256 

'Grabs MAC from current machine 
strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 
Set colItems = objWMIService.ExecQuery _ 
("Select * From Win32_NetworkAdapterConfiguration Where IPEnabled = True") 
For Each objItem in colItems 
    MacAdd = objItem.MACAddress 
Next 

'Finds the pattern of a MAC address then changes it for 
'file naming purposes. You can change the FormatMAC line of the code 
'in parenthesis where the periods are, to whatever you like 
'as long as its within the standard file naming convention 
Set oRegEx = CreateObject("VBScript.RegExp") 
oRegEx.Pattern = "([\dA-F]{2}).?([\dA-F]{2}).?([\dA-F]" _ 
& "{2}).?([\dA-F]{2}).?([\dA-F]{2}).?([\dA-F]{2})" 
FormatMAC = oRegEx.Replace(MacAdd, "$1.$2.$3.$4.$5.$6") 

'Gets current date in a format for file naming 
'Periods can be replaced with anything that is standard to 
'file naming convention 
CurDate = Month(Date) & "." & Day(Date) & "." & Year(Date) 

'Gets path of the directory where the script is being ran from 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
scriptPath = Wscript.ScriptFullName 
Set oFile = objFSO.GetFile(scriptPath) 
CurDir = objFSO.GetParentFolderName(oFile) 

'where and what the zip file will be called/saved 
MyTarget = CurDir & "\" & "IRAP_LOGS_" & CurDate & "_" & FormatMAC & ".zip" 

'Actual creation of the zip file 
MyHex = Array(80, 75, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0) 
For i = 0 To UBound(MyHex) 
    MyBinary = MyBinary & Chr(MyHex(i)) 
Next 
Set oShell = CreateObject("WScript.Shell") 
Set oCTF = objFSO.CreateTextFile(MyTarget, True) 
oCTF.Write MyBinary 
oCTF.Close 
Set oCTF = Nothing 
wScript.Sleep(3000) 

folder1 = True 
folder2 = True 
folder3 = True 

'Adds folders to the zip file created earlier 
'change these folders to whatever is needing to be copied into the zip folder 
'Folder1 
If not objFSO.FolderExists("C:\Windows\Temp\SMSTSLog") and If not objFSO.FolderExists("X:\Windows\Temp\SMSTSLog") then 
    Folder1 = false 
End If 

If objFSO.FolderExists("C:\Windows\Temp\SMSTSLog") Then 
    Folder1 = "C:\Windows\Temp\SMSTSLog" 
    Set FoldPath1 = objFSO.getFolder(Folder1) 
Else 
    Folder1 = "X:\windows\Temp\SMSTSLog" 
    Set FoldPath1 = objFSO.getFolder(Folder1) 
End If 

'Folder2 
    If not objFSO.FolderExists("C:\Windows\System32\CCM\Logs") and If not objFSO.FolderExists("X:\Windows\System32\CCM\Logs") then 
    Folder2 = false 
End If 
If objFSO.FolderEXists("C:\Windows\System32\CCM\Logs") Then 
    Folder2 = "C:\Windows\System32\CCM\Logs" 
    Set FoldPath2 = objFSO.getFolder(Folder2) 
Else 
    Folder2 = "X:\Windows\System32\CCM\Logs" 
    Set FoldPath2 = objFSO.getFolder(Folder2) 
End If 
'Folder3 
If not objFSO.FolderExists("C:\Windows\SysWOW64\CCM\Logs") and If not objFSO.FolderExists("X:\Windows\SysWOW64\CCM\Logs") then 
    Folder3 = false 
End If 
If objFSO.FolderExists("C:\Windows\SysWOW64\CCM\Logs") Then 
    Folder3 = "C:\Windows\SysWOW64\CCM\Logs" 
    set FolderPath3 =objFSO.getFolder(Folder3) 
Else 
    Folder3 = "X:\Windows\SysWOW64\CCM\Logs" 
    Set FoldPath3 = objFSO.getFolder(Folder3) 
End If 

set objFSO = CreateObject("Scripting.FileSystemObject") 
objFSO.OpenTextFile(MyTarget, 2, True).Write "PK" & Chr(5) & Chr(6) _ 
& String(18, Chr(0)) 

Set ShellApp = CreateObject("Shell.Application") 
Set zip = ShellApp.NameSpace(MyTarget) 





'checks if files are there before trying to copy 
'otherwise it will error out 
If folder1 = True And FoldPath1.files.Count >= 1 Then 
    zip.CopyHere Folder1 
End If 
WScript.Sleep 3000 
If folder2 = true And FoldPath2.files.Count >= 1 Then 
    zip.CopyHere Folder2 
End If 
WScript.Sleep 3000 
If folder3 = true And FoldPath3.files.Count >= 1 Then 
    zip.CopyHere Folder3 
End If 


WScript.Sleep 5000 

set ShellApp = Nothing 
set ZipFile = Nothing 
Set Folder1 = Nothing 
Set Folder2 = Nothing 
Set Folder3 = Nothing 

createobject("wscript.shell").popup "Zip File Created Successfully", 3 

回答

1

I 認爲。第60行是:

If not objFSO.FolderExists("C:\Windows\Temp\SMSTSLog") and If not objFSO.FolderExists("X:\Windows\Temp\SMSTSLog") then 

一個連詞條件應該是這樣的:

If somecondition And othercondition Then 

所以刪除第二個/嵌入 「如果」。

+0

謝謝,我希望有時間來嘗試一下,讓你知道,再次感謝。 – user2868186

0

你可以改變這些區塊與該邏輯Not A And Not B等於Not (A Or B)

Folder1 = Not (objFSO.FolderExists("C:\Windows\Temp\SMSTSLog") Or _ 
    objFSO.FolderExists("X:\Windows\Temp\SMSTSLog")) 

Folder2 = Not (objFSO.FolderExists("C:\Windows\System32\CCM\Logs") Or _ 
    objFSO.FolderExists("X:\Windows\System32\CCM\Logs")) 

Folder3 = Not (objFSO.FolderExists("C:\Windows\SysWOW64\CCM\Logs") Or _ 
    objFSO.FolderExists("X:\Windows\SysWOW64\CCM\Logs")) 

還你Set FolderPath3 = objFSO.getFolder(Folder3)FolderPath3不是以後使用。它應該是Set FoldPath3 = objFSO.getFolder(Folder3)

+0

謝謝,我會試着找點時間來嘗試一下。 – user2868186