Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: cbli

cbli (Level 1) - Jetzt verbinden

04.10.2007, aktualisiert 15:12 Uhr, 3289 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 ..
Ähnliche Inhalte
Windows Server
CAL-Benutzung
gelöst Frage von dibranWindows Server21 Kommentare

Hallo zusammen, ich hätte mal eine Frage zu einem bestimmten Einsatz-Szenario zu den CAL's. Im Einsatz ein Windows Server ...

Batch & Shell
Powershell Textausgabe Mindestlänge
Frage von MarabuntaBatch & Shell3 Kommentare

Hallo, ich will meine Ausgabe in der Konsole leserlicher gestalten Wie mach lege ich die mindestbreite fest? Das geht ...

Microsoft Office

Prüfung von Intervallen und Textausgabe in Excel

Frage von trallerMicrosoft Office2 Kommentare

Hallo, ich brauche eine Prüfung der Intervalle mit einer Textausgabe in Excel 2016. Irgendwie bekomme ich die Verkettung nicht ...

Festplatten, SSD, Raid

Winrar entpackt nur SEHR langsam

Frage von deb10er0Festplatten, SSD, Raid3 Kommentare

Hallo Leute, irgendwas ist bei mir sehr merkwürdig. Ich habe mir zwei neue HDs gekauft (1TB). Wenn ich Daten ...

Neue Wissensbeiträge
Humor (lol)
IoT-Gefahr: Smartes Aquarium leckt!
Information von Lochkartenstanzer vor 1 TagHumor (lol)3 Kommentare

Moin, Die IoT-Manie hat weitere Opfer gefunden. Ein Casino-Leck durch ein smartes Aquarium: Allerdings haben sie kein Wasser, sondern ...

Router & Routing

Alte Fritzbox 7270 mit VPN und SIP-Telefonie hinter O2 Homebox 6641 als "Modem"

Erfahrungsbericht von the-buccaneer vor 1 TagRouter & Routing3 Kommentare

Nun war es soweit: Auch O2 hat mich mit VOIP zwangsbeglückt. Heute am Privatanschluss, in 2 Wochen ist das ...

Sicherheit

Ungepatchte Remote Code Execution-Lücke in LG NAS

Information von kgborn vor 2 TagenSicherheit

Nutzt wer LG NAS-Einheiten? In den NAS-Einheiten der LG Network Storage-Einheiten gibt es eine sehr unschöne Schwachstelle, die einen ...

Windows Update

Neue Version KB4099950 NIC Einstellungen gehen verloren

Information von sabines vor 2 TagenWindows Update2 Kommentare

Es ist eine neue Version des KB4099950 verfügbar, die das Problem mit den verlorenen Netzwerkeinstellungen lösen soll. Das Datum ...

Heiß diskutierte Inhalte
Router & Routing
Mikrotik: Routing zwischen Interfaces mit Geräten ohne Gateway
Frage von TonLichtVideoRouter & Routing18 Kommentare

Hallo zusammen, ich komme aus dem Veranstaltungstechnik Bereich und habe zwei Netze um verschiedene Hardware zu Remoten. CONTROL1 192.168.1.0/24 ...

Linux Netzwerk
Raspberry Pi 3: WLAN Power save deaktivieren
Frage von nordie92Linux Netzwerk14 Kommentare

Moin moin, mein Raspberry Pi 3 Model B benötigt eine dauerhaft aktive WLAN-Verbindung. Leider bricht die WLAN-Verbindung nach einigen ...

SAN, NAS, DAS
Entscheidung SAN Dell oder HP
Frage von VincorSAN, NAS, DAS13 Kommentare

Hallo, wir wollen uns für unsere Hyper V Umgebung eine neue SAN Anschaffen. Es laufen 30 VM's darunter, DC; ...

Vmware
Server 2008 r2 vmware terminalserver
Frage von MasterCVmware10 Kommentare

Guten Abend zusammen, ich hoffe , dass einer von euch mir weiterhelfen kann ,bei meinem kack Problem ! Ist ...