Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Script zur Benutzung von Winrar mit Textausgabe und Fehlerbehandlung

Frage Entwicklung VB for Applications

Mitglied: cbli

cbli (Level 1) - Jetzt verbinden

04.10.2007, aktualisiert 15:12 Uhr, 3230 Aufrufe, 1 Kommentar

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

01.
Option Explicit 
02.
 
03.
' Variablen deklarieren 
04.
Dim strExtension 
05.
Dim objDatei 
06.
Dim objFSO 
07.
Dim objOrdner 
08.
Dim strOrdner 
09.
Dim WshShell 
10.
Dim rarfile 
11.
Dim entpack 
12.
Dim value 
13.
Dim objFs 
14.
Dim strWriteString 
15.
Dim strDateiname 
16.
Dim objTextStream 
17.
Const ForAppending = 8 
18.
Dim fso 
19.
 
20.
On Error Resume Next 
21.
 
22.
Set fso = CreateObject("Scripting.FileSystemObject") 
23.
fso.GetFile("d:\entpackt.txt").Delete 
24.
 
25.
if err.Number <> 0 then 
26.
msgbox   "Datei nicht vorhanden - Script wird fortgesetzt" ,64, "Hinweis" 
27.
end if 
28.
 
29.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
30.
strOrdner = "D:\temp\dateien" 
31.
strExtension = "tar" 
32.
 
33.
Set WshShell = WScript.CreateObject("WScript.Shell") 
34.
msgbox "Automatisches Entpacken von Tar Dateien" , 64, "Information" 
35.
 
36.
' Tar Verarbeitung 
37.
Set objOrdner = objFSO.GetFolder(strOrdner) 
38.
For Each objDatei In objOrdner.Files 
39.
   If (Right(objDatei.name, Len(strExtension))) = (strExtension) Then 
40.
        msgbox "Folgende Tar Datei wird entpackt "  & vbNewLine & vbNewLine & objDatei.name ,64,"Hinweis" 
41.
 
42.
WshShell.Run ("c:\programme\winrar\winrar.exe e -y -v -o+ " & objdatei.name & " D:\entpackt\"),,true 
43.
 
44.
' FileSystemObject objFs oeffnen 
45.
Set objFs= CreateObject("Scripting.FileSystemObject") 
46.
 
47.
' Dateiname festlegen 
48.
strDateiname = ("d:\entpackt.txt") 
49.
 
50.
' Einen Textstream (objTextStream) zur Textdatei oeffnen 
51.
Set objTextStream = objFs.CreateTextFile(strDateiname,ForAppending,True) 
52.
 
53.
 
54.
if err.Number <> 0 then 
55.
msgbox "   " & objDatei.name & "      konnte nicht entpackt werden",16,"Fehler" 
56.
objTextStream.WriteLine "Fehler2: " & err.Number & " " & err.Description 
57.
err.Clear 
58.
 
59.
 
60.
' Inhalt fuer Datei in String strWriteString speichern: 
61.
strWriteString = objDatei.name 
62.
 
63.
' String in Datei schreiben: 
64.
objTextStream.WriteLine strWriteString 
65.
 
66.
' Objekte schliessen 
67.
objTextStream.Close 
68.
Set objTextStream = Nothing 
69.
Set objFs = Nothing 
70.
 
71.
end if 
72.
'end if 
73.
next 
74.
 
75.
'--------------------------------------------------------------------------------------------------- 
76.
 
77.
msgbox "Automatisches Entpacken von Rar Dateien" , 64, "Information" 
78.
 
79.
' Rar Verarbeitung 
80.
strExtension = "rar" 
81.
Set objOrdner = objFSO.GetFolder(strOrdner) 
82.
For Each objDatei In objOrdner.Files 
83.
   If (Right(objDatei.name, Len(strExtension))) = (strExtension) Then 
84.
        msgbox "Folgende Rar Datei wird entpackt "  & vbNewLine & vbNewLine & objDatei.name ,64,"Hinweis" 
85.
 
86.
WshShell.Run ("c:\programme\winrar\winrar.exe e -y -v -o+ " & objdatei.name & " D:\entpackt\"),,true 
87.
 
88.
' FileSystemObject objFs oeffnen 
89.
Set objFs= CreateObject("Scripting.FileSystemObject") 
90.
 
91.
' Dateiname festlegen 
92.
strDateiname = ("d:\entpackt.txt") 
93.
 
94.
' Einen Textstream (objTextStream) zur Textdatei oeffnen 
95.
'Set objTextStream = objFs.CreateTextFile(strDateiname,8,True) 
96.
Set objTextStream = objFs.OpenTextFile(strDateiname,8,True) 
97.
 
98.
 
99.
if err.Number <> 0 then 
100.
msgbox "   " & objDatei.name & "      konnte nicht entpackt werden",16,"Fehler" 
101.
msgbox "Fehler: " & err.Number & " " & err.Description 
102.
err.Clear 
103.
 
104.
 
105.
' Inhalt fuer Datei in String strWriteString speichern: 
106.
strWriteString = objDatei.name 
107.
 
108.
' String in Datei schreiben: 
109.
objTextStream.WriteLine strWriteString 
110.
 
111.
' Objekte schliessen 
112.
objTextStream.Close 
113.
Set objTextStream = Nothing 
114.
Set objFs = Nothing 
115.
 
116.
end if 
117.
'end if 
118.
next 
119.
value = msgbox("Mit der Verarbeitung weitermachen ?" ,64 + vbYesNO, "Frage") 
120.
if value = vbYes then 
121.
 
122.
'----------------------------------------------------------------------------------------------------- 
123.
 
124.
' Endgültige Verarbeitung 
125.
Set entpack = WScript.CreateObject("WScript.Shell") 
126.
entpack.Run "c:\programme\winrar\winrar.exe e -y -v -o+ D:\entpackt\*.rar *.* D:\lager\",,true 
127.
 
128.
Dim movedateien 
129.
Dim moveordner 
130.
Dim endung(9),i 
131.
 
132.
' Array mit Werten füllen 
133.
 
134.
endung(0) = "xls" 
135.
endung(1) = "doc" 
136.
endung(2) = "txt" 
137.
endung(3) = "com" 
138.
endung(4) = "exe" 
139.
endung(5) = "vbs" 
140.
endung(6) = "pst" 
141.
endung(7) = "db" 
142.
endung(8) = "mdb" 
143.
endung(9) = "gdb" 
144.
 
145.
moveordner = "d:\entpackt\" 
146.
 
147.
Set movedateien = Server.CreateObject("Scripting.FileSystemObject") 
148.
Set objOrdner = objFSO.GetFolder(moveordner) 
149.
 
150.
For i=0 to 9 
151.
  endung(i) = i 
152.
 
153.
For Each objDatei In objOrdner.Files 
154.
   If (Right(objDatei.name, Len(endung(i)))) = endung(i) Then 
155.
 
156.
movedateien.MoveFile "d:\entpackt\" , " & objDatei.endung & ", "D:\lager\" 
157.
 
158.
set movedateien = nothing 
159.
 
160.
end if 
161.
next 
162.
Next  
163.
msgbox "Alle Dateien wurden verarbeitet", 64, "Hinweis" 
164.
 
165.
 
166.
end if 
167.
if value = vbNO then 
168.
msgbox "Verarbeitung wird beendet",64, "Hinweis" 
169.
end if
Mitglied: bastla
04.10.2007 um 15:12 Uhr
Hallo cbli!

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:
01.
If (Right(objDatei.name, Len(strExtension))) = (strExtension) Then
wird etwas sicherer, wenn Du auch andere Schreibweisen als nur durchgängige Kleinschreibung für den Dateityp berücksichtigst, also
01.
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.
01.
endung(i) = i
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:
01.
Endungen = Array("xls", "doc", ...) 
02.
For Each Endung In Endungen 
03.
... 
04.
Next
wobei ich die Zuweisung "Endungen = Array(...)" ebenfalls zu den Variablen-/Konstanten-Deklarationen an den Anfang des Scripts setzen würde.

01.
movedateien.MoveFile "d:\entpackt\" , " & objDatei.endung & ", "D:\lager\" 
02.
 
03.
set movedateien = nothing
kannst Du, da Du ja schon ein "File"-Objekt hast, ersetzen durch
01.
objDatei.Move "D:\lager\"
Am Ende könntest Du schließlich noch die Zeilen
01.
end if 
02.
if value = vbNO then
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
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...