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, 3302 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 ...

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 ...

Vmware

Unterschied RAM Benutzung VmWare und Windows

gelöst Frage von TheHawkVmware3 Kommentare

Guten Morgen, Meine Frage betrifft folgendes. Wenn ich auf meinem MySQL Server den RAM Verbrauch in Windows gucke sagt ...

Backup

VSS benutzung von mehreren Programmen

Frage von geocastBackup5 Kommentare

Hallo zusammen Ich bin gerade an Backups einrichten und hätte ein Frage zu VSS (Volumen Shadow Copy) von Microsoft. ...

Neue Wissensbeiträge
Humor (lol)
Administrator.de Perlen
Tipp von DerWindowsFreak2 vor 2 StundenHumor (lol)1 Kommentar

Hallo, Heute beim stöbern auf dieser Seite bin auf folgenden Thread aus dem Jahre 2006 gestossen: Was meint ihr? ...

Erkennung und -Abwehr
OpenSSH-Backdoor Malware erkennen
Tipp von Frank vor 23 StundenErkennung und -Abwehr

Sicherheitsforscher von Eset haben 21 Malware-Familien untersucht. Die Malware soll Hintertüren via OpenSSH bereitstellen, so dass Angreifer Fernzugriff auf ...

iOS
WatchChat für Whatsapp
Tipp von Criemo vor 4 TageniOS3 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor!
Tipp von Criemo vor 4 TageniOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Heiß diskutierte Inhalte
Server-Hardware
WS 2016 Essentials Hardware
Frage von ChefknechtServer-Hardware23 Kommentare

Moin welche Hardware würdet ihr empfehlen? Dell Poweredge HP Proliant Fujitsu Ich bin total konfus was nun nötig ist, ...

Windows Server
Welche Option fürs Windows Server Installations besser
Frage von backitWindows Server20 Kommentare

Hi Zusammen, ich werde unserer AD (SBS 2011) und Exchange 2010 Servern auf neuen physikalischen Server umziehen. ich habe ...

Windows Update
Fehler bei Updates über WSUS
Frage von Hendrik2586Windows Update19 Kommentare

Guten Tag liebe Kolleginen und Kollegen, lang lang ist meine letzte Anfrage her. Hier etwas das mich nun schon ...

Router & Routing
VPN u. WLAN Router für Reisen
Frage von stephan902Router & Routing17 Kommentare

Hallo, ich bin auf der Suche nach einem VPN/WLAN-Router für unterwegs. Und zwar möchte ich auf Reisen einfach den ...