2014-03-02 1 views
0

S-curl 및 흐르는 케이프가있는 놈입니다. 필자의 데스크탑에 압축 된 글꼴 파일을 다운로드하는 친구가 있습니다. 그런 다음 파일을 열고 C : \ fonts 폴더에 글꼴을 복사 한 다음 글꼴을 설치합니다. 이 스크립트는 XP에서 사용하도록되어 있습니다. 나는 그녀가 과정을 자동화하는 것을 도울 것이라고 언급했다. 그래서 내 방법론은 그녀가 다운로드 한 zip 파일을 바탕 화면에서 스캔하여 내 바탕 화면에서 내 파일 폴더에있는 ZipFonts라는 폴더로 파일을 옮기는 스크립트를 만드는 것이 었습니다. ZipFonts가 만들어지면 ZipStaging과 CompletedZips라는 두 개의 폴더가 만들어집니다. ZipFonts 폴더로 압축 파일을 옮기는 것이 계획입니다. 그런 다음 ZipFonts를 반복하고 Zip 파일의 내용을 ZipStaging 폴더에 비워두면 Zip 파일이 CompletedZips 폴더로 이동됩니다. 나는 성공적으로 작동하는지 확인하기 위해이 스크립트를 한 장씩하고있다. 성공적으로 폴더를 만들고 ZipFonts 폴더로 압축 파일을 옮길 수있었습니다. 루프를 실행하여 압축 파일을 열면 "Line 44/Char 4/Object Required : 'objShellApp.Namespace (...)'/ Code : 800A01A8"VBScript는 압축 파일이 포함 된 폴더를 반복하고 다른 폴더로 파일 압축을 풉니 다.

철자가 틀립니다. 모든 것이 올바르게 작동하고 Notepad ++를 사용하여 모든 것이 정의되었는지 확인합니다. 루프의 내부와 외부에 Set 객체 참조를 넣어 차이를 만들지 만 동일한 오류가 발생하는지 확인합니다. 내가 뭘 놓치고 있니?

1 Option Explicit 
    2 
    3 Public objFSO, objShell 
    4 Public UserPoint, UserDesktop, UserDocs, ZFFolder, ZSFolder, CZFolder 
    5 Public SourceFolder, file 
    6 Public zFolder 
    7 
    8 
    9 Set objFSO = CreateObject("Scripting.FileSystemObject") 
    10 Set objShell = CreateObject("Wscript.Shell") 
    11 
    12 UserPoint = objShell.ExpandEnvironmentStrings("%USERPROFILE%") 
    13 UserDesktop = (UserPoint & "\Desktop") 
    14 UserDocs = (UserPoint & "\My Documents")15 ZFFolder = (UserDocs & "\ZipFonts\") 
    16 ZSFolder = (ZFFolder & "ZipStaging\") 
    17 CZFolder = (ZFFolder & "CompletedZips\") 
    18 
    19 Sub MoveFromDesktop 'Move folders from Desktop To ZipFonts folder 
    20 Set SourceFolder = objFSO.GetFolder(UserDesktop) 
    21 FOR EACH file In SourceFolder.Files 'Loop through the user's Desktop folder   for files ending with .zip 
    22  If Right(LCase(file.Name),4) = ".zip" Then 
    23  'move the file into the %USERPROFILE%\My Documents\ZipFonts folder 
    24  objFSO.CopyFile file.Path, ZFFolder, TRUE 
    25   objFSO.DeleteFile file.Path 
    26   '**figure out how to report that each file is being moved or display some sort of progress bar 
    27   '**figure out how to report that file relocation has been completed for a few seconds 
    28  End If 
    29 NEXT 
    30 Set SourceFolder = NOTHING 
    31 Set SourceFolder = objFSO.GetFolder(ZFFolder) 
    32 If SourceFolder.Files.Count = 0 Then 
    33  MsgBox("There are no compressed files (files ending with extension .zip) on your desktop.") 
    34  MsgBox("Please click OK to end.") 
    35  WScript.Quit 
    36 End If 
    37 End Sub 
    38 
    39 Sub Extract(file, folder) 'Using Extract for UnZipFiles 
    40 Dim objShellApp, objSource, zFile, i : i = 1 
    41 'sa = objShellApp||filesInZip = objSource||zfile = zFile||fso is already declared and defined as objFSO in PUBLIC 
    42 
    43 Set objShellApp = CreateObject("Shell.Application") 
    44 Set objSource = objShellApp.NameSpace(folder&file).Items 
    45 FOR EACH zFile in objSource 'Eliminating file checking since this is done in my MoveFromDesktop Sub 
    46  objShellApp.NameSpace(folder).Copyhere(zFile), &H100 
    47  i = i + 1 
    48  If i = 99 THEN 
    49  Call zCleanup(file, i) 
    50   i = 1 
    51  End If 
    52 NEXT 
    53 If i > 1 THEN 
    54  Call zCleanup(file, i) 
    55 End If 
    56 objFSO.DeleteFile(folder&file) 
    57 'objTarget.CopyHere objSource, intOptions 
    58 'intOptions = 256 
    59 
    60 Set objSource = Nothing 
    61 End Sub 
    62 
    63 Sub zCleanUp(file, count) 
    64 Dim i, text 'fso is already declared and defined as objFSO in PUBLIC 
    65 
    66 For i = 1 TO count 
    67  If objFSO.FolderExists(objFSO.GetSpecialFolder(2) & "\Temporary Directory " & i & " for " & file) = TRUE THEN 
    68  text = fso.DeleteFolder(fso.GetSpecialFolder(2) & "\Temporary Directory " & i & " for " & file, True) 
    69  Else 
    70  Exit For 
    71  End If 
    72 Next 
    73 End Sub 
    74 
    75 If objFSO.FolderExists(ZFFolder)= FALSE Then 
    76 Set SourceFolder = objFSO.CreateFolder(ZFFolder)'Create folder %USERPROFILE%\My Documents\ZipFonts 
    77 Set SourceFolder = Nothing 
    78 Set SourceFolder = objFSO.CreateFolder(ZSFolder)'Create folder %USERPROFILE%\My Documents\ZipFonts\ZipStaging 
    79 Set SourceFolder = objFSO.CreateFolder(CZFolder)'Create folder %USERPROFILE%\My Documents\ZipFonts\CompletedZips 
    80 Set SourceFolder = NOTHING 
    81 End If 
    82 
    83 MoveFromDesktop 
    84 
    85 Set SourceFolder = objFSO.GetFolder(ZFFolder) 
    86 FOR EACH file In SourceFolder.Files 'Loop through all of the files in the %USERPROFILE%\My Documents\ZipFonts folder ending with .zip 
    87 EXTRACT file, ZSFolder 
    88 NEXT 
    89 Msgbox("Ending Script") 
    90 Wscript.quit 
+1

코드가 오류 메시지와 일치하지 않습니다. 43 번째 줄에는 'objShellApp'이 없습니다. 어떤 파일이 실제로 오류를 발생시키고 있는지 확인 했습니까? 또한'CopyHere'는 비동기 적으로 실행됩니다 (즉,'CopyHere'가 끝나기 전에 코드가 이미 계속됩니다). 그리고 변수를 사용하면'intOptions'를 정의하는 것이 무의미합니다. –

+0

어! 당신은 정확하지만 objShell을 objShellApp로 수정 한 후에도 여전히 오류가 발생합니다. – user3371732

+0

오류가 발생하면'zfile'의 값과 유형을 확인 했습니까? 당신이 시도 할 수있는 한가지는 Set objSource = objShellApp.NameSpace (zfile)로 할당을 변경 한 다음 복사 명령에서'Items' 콜렉션을 사용하는 것입니다 :'objTarget.CopyHere objSource.Items, intOptions'. –

답변

0

코드의 각 부분에있는 MsgBox 문에 지금 약간 추적 값 @ 부자의 코드를 수정 [코드 아래는, 좀 이상한 물건을했고, 다음 코드를 내놓았다. 각 파일을 반복하고 압축을 풀어 파일을 ZipStaging 폴더로 이동합니다. 이것이 주요한 장애물이었습니다.

Public objFSO, objShell, objshellApp 
Public SourceFolder, file 
Public UserPoint, UserDesktop, UserDocs, ZFFolder, ZSFolder, CZFolder 

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objShell = CreateObject("Wscript.Shell") 

UserPoint = objShell.ExpandEnvironmentStrings("%USERPROFILE%") 
UserDesktop = (UserPoint & "\Desktop") 
UserDocs = (UserPoint & "\My Documents") 
ZFFolder = (UserDocs & "\ZipFonts\") 
ZSFolder = (ZFFolder & "ZipStaging\") 
CZFolder = (ZFFolder & "CompletedZips\") 

Sub DoesZipExist 
    Set SourceFolder = objFSO.GetFolder(UserDesktop) 
    FOR EACH file In SourceFolder.Files 'Loop through the user's Desktop folder for files ending with .zip 
     If Right(LCase(file.Name),4) <> ".zip" Then  
     KeepLooking = TRUE 
     Else 
     KeepLooking = FALSE 
     Exit FOR 
     Exit Sub 
     End If 
    Next 
    If KeepLooking = TRUE Then 
     MsgBox("There are no compressed files (files ending with extension .zip) on your desktop.") 
     MsgBox("Please click OK to end.") 
     WScript.Quit 
    End If 
End Sub 

Sub InitialFolderCreation 
    If objFSO.FolderExists(ZFFolder) = FALSE Then 
     Set SourceFolder = objFSO.CreateFolder(ZFFolder)'Create folder %USERPROFILE%\My Documents\ZipFonts 
     Set SourceFolder = Nothing 
     Set SourceFolder = objFSO.CreateFolder(ZSFolder)'Create folder %USERPROFILE%\My Documents\ZipFonts\ZipStaging 
     Set SourceFolder = objFSO.CreateFolder(CZFolder)'Create folder %USERPROFILE%\My Documents\ZipFonts\CompletedZips 
     Set SourceFolder = NOTHING 
    End If 
End Sub 

Sub MoveFromDesktop 'Move folders from Desktop To ZipFonts folder 
    Set SourceFolder = objFSO.GetFolder(UserDesktop) 
    FOR EACH file In SourceFolder.Files 'Loop through the user's Desktop folder for files ending with .zip 
     If Right(LCase(file.Name),4) = ".zip" Then 
    'move the file into the %USERPROFILE%\My Documents\ZipFonts folder 
     objFSO.CopyFile file.Path, ZFFolder, TRUE 
     objFSO.DeleteFile file.Path 
     '**figure out how to report that each file is being moved or display some sort of progress bar 
     '**figure out how to report that file relocation has been completed for a few seconds 
    End If 
    NEXT 
End Sub 

Function Unzip(strFileName,strFolderName) 
    'Create Shell.Application so we can use the CopyHere method 
    Set objshellApp = CreateObject("Shell.Application") 
    'Use CopyHere to extract files 
    objshellApp.NameSpace(strFolderName).CopyHere objshellApp.NameSpace(FileHolder).Items 
    Set objfso = Nothing 
    Set objshellApp = Nothing 
End Function 

DoesZipExist 
InitialFolderCreation 
MoveFromDesktop 

Set SourceFolder = objFSO.GetFolder(ZFFolder) 
FOR EACH file in Sourcefolder.files 
    FileHolder = file 
    Unzip FileHolder, ZSFolder 
NEXT 
MsgBox ("All compressed (.zip) files have been extracted. Ending script.") 
Wscript.quit 

내가 알고 내가 사용하지 않는 변수를 많이 남겨 그리고 그들 중 일부를 선언하지 않았다,하지만 난 SuperNoob했다 말 했는가! 이제 임시 파일을 정리하기 위해 @Rich가 언급 한 코드를 구현해야합니다.

+0

다행이 당신을 위해 일했습니다! – Rich

관련 문제