VBScript per spostare file con caratteri jolly, se esiste

Sto cercando di creare uno script che verifica l’esistenza del archiviati nel registro eventi di file e, se i file esistono, li sposta in un’altra cartella. L’esecuzione di questo script non fa nulla e non dà errori. Credo che il carattere jolly Se la dichiarazione è quello che mi sta dando problemi. Sono nuovo di vbscript, e scripting in generale, e gradirei qualche consiglio.

Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists("d:\eventlogs\Archive*.evtx")) Then
    FSO.CopyFile "d:\eventlogs\Archive*.evtx" , "d:\eventlogs\archive\"
    FSO.Deletefile "d:\eventlogs\archive*.evtx"
End if
  • Perché VBScript quando DOS file batch può farlo ok?
InformationsquelleAutor user3157550 | 2014-01-03



3 Replies
  1. 4

    È possibile replicare una wild card di ricerca utilizzando una combinazione di instr() e right(), o semplicemente più instr().

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    objStartFolder = "d:\eventlogs\"
    
    Set objFolder = objFSO.GetFolder(objStartFolder)
    
    Set colFiles = objFolder.Files
    For Each objFile in colFiles
       if instr(objFile.Name,"Archive") <> 0 AND instr(objFile.Name,".evtx") <> 0 then
           objFSO.MoveFile objFile.Name, "archive\" + objFile.Name
       end if
    Next
  2. 2

    L’approccio appropriato di ricerca di file con caratteri jolly in VBScript:

    1. Ottenere la raccolta di file dalla cartella contenente
    2. Per ogni file nella filecollection:
    3. Test il nome del file con un espressione regolare su un determinato modello
    4. Se passa il test, fare un po ‘ di azione con questo file
    5. File successivo
    • In questo caso mi piacerebbe confronti di stringa per l’estensione e l’inizio del nome del file potrebbe essere più facile da gestire rispetto a una espressione regolare.
  3. 0

    Ritardo di risposta, ma potrebbe essere utile, perché a quanto pare nessuno, visto l’errore.

    Da VBScript documentazione (script56.chm nel mio caso), la pagina di aiuto per CopyFile metodo dice:

    FileExists Metodo

    Restituisce Vero se un determinato file esiste; False se non
    non.

    object.FileExists(filespec)

    Argomenti

    oggetto

    Richiesto. Sempre il nome di un FileSystemObject.

    filespec

    Richiesto. Il nome del file, la cui esistenza è determinato. Un completo percorso (assoluto o relativo) devono essere forniti se il file non è prevista nella cartella corrente.

    Quindi l’espressione fso.FileExists("d:\eventlogs\Archive*.evtx") restituisce False qui; infatti non c’è nessun file di nome Archive*.evtx nella vostra cartella.

    O si rimuove il test, ma avrete a che fare con l’errore, la CopyFile metodo potrebbe generare, come doc dice:

    Un errore si verifica anche se una fonte utilizzo di caratteri jolly non corrisponde alcun file.

    Come suggerito da @automatedchaos nella sua risposta https://stackoverflow.com/a/20907209/666414 si può anche scorrere in ciclo i file della cartella e di decidere che cosa fare ogni volta il nome del file/estensione corrisponde il vostro modello.

    Infine, è possibile mescolare le due soluzioni: loop attraverso i file della cartella, quindi impostare un flag per Vero e Exit Loop non appena si incontra un file previsto, quindi utilizzare il CopyFile metodo.

    Come questo:

    With CreateObject("Scripting.FileSystemObject")
        For Each objFile in .GetFolder("d:\eventlogs\").Files
            If Left(objFile.Name, 7) = "Archive" And .GetExtensionName(objFile) = "evtx" Then
                archiveFound = True
            End If
        Next
    
        If archiveFound Then
            .CopyFile "d:\eventlogs\Archive*.evtx", "d:\eventlogs\archive\"
            .DeleteFile "d:\eventlogs\Archive*.evtx"
        End If
    End With

    Nota, il jolly di lavoro con la DeleteFile metodo troppo!

Lascia un commento