VBScript Dateien Zippen, Kopieroption ignorieren

  • VBScript

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    VBScript Dateien Zippen, Kopieroption ignorieren

    Hallo zusammen,

    Ich habe via Google ein VBScript geschrieben, welches .txt Dateien in einen Zip-Ordner kopiert.
    Die .txt erhalte ich über eine Schnittstelle in die bestimmten Ordner.
    Es werden Zip-Ordner nach Monat + Jahr erstellt ausgehend vom Erstelldatum der .txt Dateien.

    Also wird entweder ein neuer Zip-Ordner erstellt oder in einen bestehenden Zip-Ordner Dateien hinzugefügt.

    Manchmal passiert es, dass man eine Datei vergessen hat, via Schnittstelle zu übertragen und diese im Nachhinein macht.
    Dies kann dazu führen, dass die später eingereichte Datei und eine Datei in einem bereits vorhandenen Zip-Ordner den gleichen Namen haben.

    Dadurch erhalte ich die Standard Windows Meldung, ob ich die Datei Kopieren soll oder überschreiben etc.
    Nun würde ich diese Meldung gerne ignorieren, dass ich sage: "Falls der Name bereits existiert; Überspringen".
    Leider habe ich dies nicht hinbekommen und würde gerne um eure Hilfe oder euren Rat fragen.

    Hier mein Code:

    Quellcode

    1. With oFSO
    2. zipFile = .GetAbsolutePathName(zipFile)
    3. sFolder = .GetAbsolutePathName(sFolder)
    4. If(oFSO.FileExists(zipFile) = False) Then
    5. With .CreateTextFile(zipFile, True)
    6. .Write Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, chr(0))
    7. End With
    8. End If
    9. End With
    10. With oSAP
    11. .NameSpace(zipFile).CopyHere .NameSpace(sFolder).Items
    12. Do Until .NameSpace(zipFile).Items.Count = _
    13. .NameSpace(sFolder).Items.Count
    14. WScript.Sleep 1000
    15. Loop
    16. End With


    Natürlich habe ich gesehen, dass auf msdn.microsoft.com/en-us/library/ms630707.aspx geschrieben steht, dass bei .zip einige Optionen ignoriert werde.
    Jedoch hat bei mir keines funktioniert.

    Gruss
    Ovoxo

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Ovoxo“ ()

    Du kannst mit den vOptions spielen.
    Das Flag 16 schaut vielversprechend aus.
    msdn.microsoft.com/en-us/libra…255&MSPPError=-2147217396

    Wenn du damit nicht den gewünschten Erfolg erzielen kannst, musst du dein ZIP in ein temporäres Verzeichnis entpacken und von dort die Dateien bedarfsweise kopieren.

    Das FilesystemObject hast du ja schon.
    Da gibt's Funktionen wie .FileExists und diverse Möglichkeiten Datein zu kopieren oder zu verschieben.

    Ovoxo schrieb:

    Do Until .NameSpace(zipFile).Items.Count = _
    .NameSpace(sFolder).Items.Count
    WScript.Sleep 1000
    Loop
    Das ist ja eine ganz heisse Konstruktion.
    Kannst du mal erklären, was du damit bezwecken willst?
    Und vor allem was passiert, wenn im Zielverzeichnis schon Dateien sind?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Mir ist schon klar, dass das ein Sync ist, um die asynchrone Shell-Funktion einzufangen.
    Aber der funktioniert nur unter den richtigen Rahmenbedingungen.

    In der Originalquelle deines Source-Codes ist dein Problem übrigens gelöst:
    naterice.com/zip-and-unzip-fil…ndows-shell-and-vbscript/
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @petaod
    Ich habe noch eine Frage.
    Beim Zippen auf dem Server (Win 2003) erhalte ich den Fehler:

    "Ausgabedatei kann nicht erstellt werden"

    Dieser Fehler ist ein Zip Fehler, jedoch konnte ich nicht herausfinden warum dies passiert.
    Da bei mir Lokal (Win 7) dieser Fehler nicht erscheint.
    Könnte die Sync eine Rolle spielen, welche nur bei bestimmten Bedingungen zutrifft?
    Nein ist nicht aktiviert.
    Falls dir der Gedanke kam, dass ich etwas falsches kopieren möchte.
    Es kopiert nur wenn die Datenedung auf txt aufhört.

    Quellcode

    1. If(right(file, 3) = "txt") Then
    2. ...
    3. End If


    Jedoch glaube ich es ist besser wenn ich es umschreibe und mit der 7z.exe löse.

    Ovoxo schrieb:

    Falls dir der Gedanke kam, dass ich etwas falsches kopieren möchte.
    Nein.
    Diese Variante bedient sich des Explorers, um dessen Zip-Funktionen auszuführen.
    Deswegen ist die Funktionalität stark abhängig von den Explorereinstellungen.

    Einfach mal im Debugger durchgehen, wo's klemmt.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --