Script zur Benutzung von Winrar mit Textausgabe und Fehlerbehandlung
Ich möchte gepackte Dateien mit bestimmten Endungen aus einem Verzeichnis auswählen lassen,diese vor dem Entpacken anzeigen lassen (nicht in Txt Datei - sondern msgbox).
Daraufhin sollen nur diese gefundenen Dateien in ein anderes Verzeichnis entpackt werden und
dort später weiterverabeitet werden.
Dieser Teil des Scripts funktioniert schon.
Was nicht funktioniert ist,daß der Dateiname jeder entpackten Datei zusätzlich noch in eine Textdatei geschrieben werden soll.
Er schreibt zwar die Textdatei,aber überschreibt immer nur alles was zuvor in der 1 Zeile stand. Ich möchte das alles untereinander aufgelistet wird.
For Appending habe ich benutzt.
Diese Textdatei soll nach Ende des Scripts angezeigt werden in einer msgbox oder als txt datei geöffnet werden.
Nächstes Problem ist die Fehlerbehandlung mit winrar.
Funktioniert überhaupt nicht so wie es soll.
Ich möchte,daß wenn ein Fehler z.B beim entpacken auftritt,dieser mit dem Dateinamen und der fehlernummer in einer Textdatei gespeichert werden soll.
Diese Textdatei soll nach Ende des Scripts angezeigt werden in einer msgbox oder als txt datei geöffnet werden.
Letztes Problem ist,daß nach dem entpacken noch bestimmte Dateien mit bestimmten Dateiendungen in ein anderes Verzeichnis verschieben will.
Wie der move befehl funktioniert weiß ich,nur will ich ja nicht die ganzen Dateiendungen einzeln im Script behandeln,sondern es als Schleife handeln.
Doch das funktioniert nicht.
Das Sahnehäubchen auf das Ganze wäre noch,wenn die Dateien aus dem Ursprungsverzeichnis
automatisch gelöscht werden,aber nur wenn das entpacken der einzelnen Dateien ohne Fehler abgeschlossen wurde.
Vielen Vielen Dank für eure Hilfe
Gruß
Claus
Daraufhin sollen nur diese gefundenen Dateien in ein anderes Verzeichnis entpackt werden und
dort später weiterverabeitet werden.
Dieser Teil des Scripts funktioniert schon.
Was nicht funktioniert ist,daß der Dateiname jeder entpackten Datei zusätzlich noch in eine Textdatei geschrieben werden soll.
Er schreibt zwar die Textdatei,aber überschreibt immer nur alles was zuvor in der 1 Zeile stand. Ich möchte das alles untereinander aufgelistet wird.
For Appending habe ich benutzt.
Diese Textdatei soll nach Ende des Scripts angezeigt werden in einer msgbox oder als txt datei geöffnet werden.
Nächstes Problem ist die Fehlerbehandlung mit winrar.
Funktioniert überhaupt nicht so wie es soll.
Ich möchte,daß wenn ein Fehler z.B beim entpacken auftritt,dieser mit dem Dateinamen und der fehlernummer in einer Textdatei gespeichert werden soll.
Diese Textdatei soll nach Ende des Scripts angezeigt werden in einer msgbox oder als txt datei geöffnet werden.
Letztes Problem ist,daß nach dem entpacken noch bestimmte Dateien mit bestimmten Dateiendungen in ein anderes Verzeichnis verschieben will.
Wie der move befehl funktioniert weiß ich,nur will ich ja nicht die ganzen Dateiendungen einzeln im Script behandeln,sondern es als Schleife handeln.
Doch das funktioniert nicht.
Das Sahnehäubchen auf das Ganze wäre noch,wenn die Dateien aus dem Ursprungsverzeichnis
automatisch gelöscht werden,aber nur wenn das entpacken der einzelnen Dateien ohne Fehler abgeschlossen wurde.
Vielen Vielen Dank für eure Hilfe
Gruß
Claus
Option Explicit
' Variablen deklarieren
Dim strExtension
Dim objDatei
Dim objFSO
Dim objOrdner
Dim strOrdner
Dim WshShell
Dim rarfile
Dim entpack
Dim value
Dim objFs
Dim strWriteString
Dim strDateiname
Dim objTextStream
Const ForAppending = 8
Dim fso
On Error Resume Next
Set fso = CreateObject("Scripting.FileSystemObject")
fso.GetFile("d:\entpackt.txt").Delete
if err.Number <> 0 then
msgbox "Datei nicht vorhanden - Script wird fortgesetzt" ,64, "Hinweis"
end if
Set objFSO = CreateObject("Scripting.FileSystemObject")
strOrdner = "D:\temp\dateien"
strExtension = "tar"
Set WshShell = WScript.CreateObject("WScript.Shell")
msgbox "Automatisches Entpacken von Tar Dateien" , 64, "Information"
' Tar Verarbeitung
Set objOrdner = objFSO.GetFolder(strOrdner)
For Each objDatei In objOrdner.Files
If (Right(objDatei.name, Len(strExtension))) = (strExtension) Then
msgbox "Folgende Tar Datei wird entpackt " & vbNewLine & vbNewLine & objDatei.name ,64,"Hinweis"
WshShell.Run ("c:\programme\winrar\winrar.exe e -y -v -o+ " & objdatei.name & " D:\entpackt\"),,true
' FileSystemObject objFs oeffnen
Set objFs= CreateObject("Scripting.FileSystemObject")
' Dateiname festlegen
strDateiname = ("d:\entpackt.txt")
' Einen Textstream (objTextStream) zur Textdatei oeffnen
Set objTextStream = objFs.CreateTextFile(strDateiname,ForAppending,True)
if err.Number <> 0 then
msgbox " " & objDatei.name & " konnte nicht entpackt werden",16,"Fehler"
objTextStream.WriteLine "Fehler2: " & err.Number & " " & err.Description
err.Clear
' Inhalt fuer Datei in String strWriteString speichern:
strWriteString = objDatei.name
' String in Datei schreiben:
objTextStream.WriteLine strWriteString
' Objekte schliessen
objTextStream.Close
Set objTextStream = Nothing
Set objFs = Nothing
end if
'end if
next
'---------------------------------------------------------------------------------------------------
msgbox "Automatisches Entpacken von Rar Dateien" , 64, "Information"
' Rar Verarbeitung
strExtension = "rar"
Set objOrdner = objFSO.GetFolder(strOrdner)
For Each objDatei In objOrdner.Files
If (Right(objDatei.name, Len(strExtension))) = (strExtension) Then
msgbox "Folgende Rar Datei wird entpackt " & vbNewLine & vbNewLine & objDatei.name ,64,"Hinweis"
WshShell.Run ("c:\programme\winrar\winrar.exe e -y -v -o+ " & objdatei.name & " D:\entpackt\"),,true
' FileSystemObject objFs oeffnen
Set objFs= CreateObject("Scripting.FileSystemObject")
' Dateiname festlegen
strDateiname = ("d:\entpackt.txt")
' Einen Textstream (objTextStream) zur Textdatei oeffnen
'Set objTextStream = objFs.CreateTextFile(strDateiname,8,True)
Set objTextStream = objFs.OpenTextFile(strDateiname,8,True)
if err.Number <> 0 then
msgbox " " & objDatei.name & " konnte nicht entpackt werden",16,"Fehler"
msgbox "Fehler: " & err.Number & " " & err.Description
err.Clear
' Inhalt fuer Datei in String strWriteString speichern:
strWriteString = objDatei.name
' String in Datei schreiben:
objTextStream.WriteLine strWriteString
' Objekte schliessen
objTextStream.Close
Set objTextStream = Nothing
Set objFs = Nothing
end if
'end if
next
value = msgbox("Mit der Verarbeitung weitermachen ?" ,64 + vbYesNO, "Frage")
if value = vbYes then
'-----------------------------------------------------------------------------------------------------
' Endgültige Verarbeitung
Set entpack = WScript.CreateObject("WScript.Shell")
entpack.Run "c:\programme\winrar\winrar.exe e -y -v -o+ D:\entpackt\*.rar *.* D:\lager\",,true
Dim movedateien
Dim moveordner
Dim endung(9),i
' Array mit Werten füllen
endung(0) = "xls"
endung(1) = "doc"
endung(2) = "txt"
endung(3) = "com"
endung(4) = "exe"
endung(5) = "vbs"
endung(6) = "pst"
endung(7) = "db"
endung(8) = "mdb"
endung(9) = "gdb"
moveordner = "d:\entpackt\"
Set movedateien = Server.CreateObject("Scripting.FileSystemObject")
Set objOrdner = objFSO.GetFolder(moveordner)
For i=0 to 9
endung(i) = i
For Each objDatei In objOrdner.Files
If (Right(objDatei.name, Len(endung(i)))) = endung(i) Then
movedateien.MoveFile "d:\entpackt\" , " & objDatei.endung & ", "D:\lager\"
set movedateien = nothing
end if
next
Next
msgbox "Alle Dateien wurden verarbeitet", 64, "Hinweis"
end if
if value = vbNO then
msgbox "Verarbeitung wird beendet",64, "Hinweis"
end if
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 70121
Url: https://administrator.de/forum/script-zur-benutzung-von-winrar-mit-textausgabe-und-fehlerbehandlung-70121.html
Ausgedruckt am: 04.01.2025 um 23:01 Uhr
1 Kommentar
Hallo cbli!
Übrigens genügt ein einmaliges Erstellen des "FileSystemObject"s, du könntest also jeweils "fso" verwenden und damit "objFSO", "objFs" und auch "movedateien" ersetzen.
Und wenn ich schon dabei bin: Zwar deklarierst Du brav die verwendeten Variablen, aber die (eigentlich) Konstanten für "strOrdner", "strExtension" oder "strDateiname" etc versteckst Du mitten im Code, wobei der Dateiname auch noch tatsächlich konstant in "fso.GetFile("d:\entpackt.txt").Delete" vorkommt ...
Und auch danach hast Du nicht gefragt, aber:
wird etwas sicherer, wenn Du auch andere Schreibweisen als nur durchgängige Kleinschreibung für den Dateityp berücksichtigst, also
ist widersinnig, da damit die vorher zugewiesenen Endungen durch die Zahlenwerte der Laufvariablen überschreiben werden - aus "xls" in "endung(0)" wird dann "0" - daher: ersatzlos streichen.
Als Alternative könntest Du übrigens auch noch etwa so vorgehen:
wobei ich die Zuweisung "Endungen = Array(...)" ebenfalls zu den Variablen-/Konstanten-Deklarationen an den Anfang des Scripts setzen würde.
kannst Du, da Du ja schon ein "File"-Objekt hast, ersetzen durch
Am Ende könntest Du schließlich noch die Zeilen
durch ein einfaches "else" ersetzen ...
Hinsichtlich "winrar" würde ich, da Du ja ohnehin schon einen "Shell"-Aufruf verwendest, an eine Batch-Lösung denken, die auch gleich das Errorhandling / Verschieben / Löschen erledigen könnte.
Grüße
bastla
Er schreibt zwar die Textdatei,aber überschreibt immer nur alles was zuvor in der 1 Zeile stand. Ich möchte das alles untereinander aufgelistet wird.
Du verwendest ja auch die "CreateTextFile"-Methode und nicht "OpenTextFile".Übrigens genügt ein einmaliges Erstellen des "FileSystemObject"s, du könntest also jeweils "fso" verwenden und damit "objFSO", "objFs" und auch "movedateien" ersetzen.
Und wenn ich schon dabei bin: Zwar deklarierst Du brav die verwendeten Variablen, aber die (eigentlich) Konstanten für "strOrdner", "strExtension" oder "strDateiname" etc versteckst Du mitten im Code, wobei der Dateiname auch noch tatsächlich konstant in "fso.GetFile("d:\entpackt.txt").Delete" vorkommt ...
Und auch danach hast Du nicht gefragt, aber:
If (Right(objDatei.name, Len(strExtension))) = (strExtension) Then
If LCase(Right(objDatei.name, Len(strExtension))) = LCase(strExtension) Then
Wie der move befehl funktioniert weiß ich,nur will ich ja nicht die ganzen Dateiendungen einzeln im Script behandeln,sondern es als Schleife handeln.
Doch das funktioniert nicht.
Doch das funktioniert nicht.
endung(i) = i
Als Alternative könntest Du übrigens auch noch etwa so vorgehen:
Endungen = Array("xls", "doc", ...)
For Each Endung In Endungen
...
Next
movedateien.MoveFile "d:\entpackt\" , " & objDatei.endung & ", "D:\lager\"
set movedateien = nothing
objDatei.Move "D:\lager\"
end if
if value = vbNO then
Hinsichtlich "winrar" würde ich, da Du ja ohnehin schon einen "Shell"-Aufruf verwendest, an eine Batch-Lösung denken, die auch gleich das Errorhandling / Verschieben / Löschen erledigen könnte.
Grüße
bastla