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, 3293 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
Apple

Apple aktualisiert MacBook Pro, mit bis zu sechs Kernen

Information von Vision2015 vor 2 TagenApple

Jawohlchen das Warten hat sich gelohnt :-) Apple aktualisiert MacBook Pro Frank

Verschlüsselung & Zertifikate

In-place Upgrade verschlüsselter Windows-Systeme mittels reflectdrivers

Tipp von DerWoWusste vor 3 TagenVerschlüsselung & Zertifikate1 Kommentar

Hinter diesem sperrigen Titel verbirgt sich die Info, dass offenbar seit Win10 v1607 im Windows-Setup (setup.exe der CD/des USB-Sticks) ...

Instant Messaging
Ejabberd auf ubuntu
Anleitung von horstvogel vor 4 TagenInstant Messaging

Anliegend erstelle ich eine Anleitung für die Installation eines ejabberd auf einem Ubuntu Server. Die Anleitung ist derzeit noch ...

Windows Server

Fehler in MMC "Zertifizierungsstelle" - Hieroglyphen

Tipp von emeriks vor 4 TagenWindows Server2 Kommentare

Hi, nichts weltbewegendes, nur als Info für Euch. Bin eben drüber gestolpert: Setup 1x Windows Server 2016 Datacenter Core ...

Heiß diskutierte Inhalte
Microsoft
Dringend: Nach neustart kein zugriff mehr per RDP möglich - vermutlich wegen gelöschter SID in AD
gelöst Frage von sven784230Microsoft21 Kommentare

Hallo zusammen, gerade hat ein Server 2012 (terminalserver + Active directory) einen geplanten Neustart durchgeführt, wenn ich mich jetzt ...

Hardware
Alte Hardware verkaufen
Frage von Lebowski23Hardware19 Kommentare

Hallo, durch größere Umbauten haben einiges an Hardware "rumliegen", die wir vielleicht noch verkaufen wollen. Es sind so ca. ...

Exchange Server
Exchange 2013 - Update schlägt fehlt
Frage von chb1982Exchange Server18 Kommentare

Hallo zusammen, kann sich jemand einen Reim auf die unten stehenden Fehlermeldung machen? Sie tritt auf beim Update von ...

Windows Server
Active Directory Probleme DC sieht sich nicht selbst als DC DNS Fehler?
Frage von Cisco7971Windows Server12 Kommentare

Moin zusammen, Angefangen hat die Suche damit, dass der Anmeldedienst immer angehalten wird, bei einem Neustart des DC. nach ...