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
GELÖST

VBS: Zip-Dateien klassifizieren und bestimmt Stelle entpacken

Frage Entwicklung Basic

Mitglied: amn.ssy

amn.ssy (Level 1) - Jetzt verbinden

07.06.2014, aktualisiert 08.06.2014, 1967 Aufrufe, 16 Kommentare

Hallo,

mit dem nachfolgenden Code (clean ) wende ich mich an euch in der Hoffnung, daß mir der eine oder andere weiterhelfen kann und will!
Derzeit bin ich dabei ein eine Batch-Datei in VBS umzuschreiben und stoße mal wieder an meine Grenzen.

In der Batch sieht der betreffende Teil so aus:

01.
set root=%~dp0 
02.
set bin=%~dp0bin\ 
03.
set cfg=%bin%cfg\ 
04.
set ext=%bin%ext\ 
05.
set log=%bin%log\ 
06.
set data=%~dp0data\ 
07.
set inc=%~dp0input\coa\ 
08.
set inr=%~dp0input\raw\ 
09.
set wks=%~dp0temp\ 
10.
set stxTp=%~dp0store\xls\ 
11.
 
12.
set /A cntdata=0 
13.
 
14.
for %%f in (%data%*.zip) do set /A cntdata+=1 
15.
if "%cntdata%"=="0" call :ErrorMSG_Zip 
16.
 
17.
set "FirstMonth=" 
18.
for /f "delims=" %%i in ('dir /b/a-d "%data%"') do if not defined FirstMonth set "FirstMonth=%%~ni" 
19.
set "FirstMonth=%FirstMonth:~,4%" 
20.
set "LastM=" 
21.
for /f "delims=" %%i in ('dir /b/a-d "%data%"^|findstr /ibv "%FirstMonth%"') do set "LastM=%%~ni" 
22.
set "LastMonth=%LastM:~,4%" 
23.
if defined LastM ( 
24.
  echo more than one dataset to process 
25.
	echo first dataset: "%FirstMonth%" 
26.
  echo last dataset= "%LastMonth%" 
27.
) else ( 
28.
	echo only one dataset to process 
29.
	echo first dataset: "%FirstMonth%" 
30.
31.
 
32.
set In=%wks%\GetInput.vbs 
33.
>%In% echo Set args=WScript.Arguments:WScript.Echo InputBox(args(0), args(1)) 
34.
:Loop 
35.
set  "ym=" & for /f "delims=" %%i in ('cscript //nologo %In% "Input yymm" "Input Year and Month" ""') do set "ym=%%i" 
36.
If not defined ym goto :Loop 
37.
 
38.
call :UnzipMSG 
39.
 
40.
for %%f in (%data%%ym%*.zip) do ( 
41.
 set "fname=%%~nxf" 
42.
 :: set "prdct=!fname:~5,10!" 
43.
  if /i "!fname:~-7!" == "coa.zip" ( 
44.
    "%ext%7z" e "%%f" -y -o"%inc%*"  
45.
  ) else ( 
46.
    "%ext%7z" e "%%f" -y -o"%inr%*" @%cfg%zipfilelist.txt 
47.
48.
) >>NUL
Was möchte ich erreichen und wo klemmts:

Im Verzeichnis

\GMD\Data\

habe ich eine Menge Zip-Dateien liegen.

Die, die in einem Workflow bearbeitet werden können sind an den ersten 4 Zeichen zu erkennen, z.B.:

1101 xyz 650.zip
1101 xyz 660.zip
1101 xyz 670.zip
1101 xyz 670 coa.zip

Diese Dateien (es könnten auch nur 3 oder weniger sein) sollen nun mit 7z in bestimmte Ordner, die z.T. schon bestehen entpackt werden.
Die Auswahl der Datei via Input wie oben in der Batch könnte auch entfallen, es müssen halt die ersten in der "Liste" sein.

In der Verzeichnisstruktur bestehen bereits die Ordner:

\gmd\input\raw\
\gmd \input\coa\

Entpackt werden sollen die Dateien nach:

\gmd\input\raw\xyz 650\
\gmd\input\raw\xyz 660\
\gmd\input\raw\xyz 670\
\gmd\input\coa\xyz 670 coa\

D.h.

\xyz 650\
\xyz 660\
\xyz 670\
\xyz 670 coa\

resultieren aus dem Dateinamen und müßten erstellt werden.

Bisher habe ich mich hieran versucht, was evtl. schon in die richtige Richtung geht, aber mit Sicherheit nicht der Weisheit letzter Schluss ist.
Es ist nicht Ausgeschlossen, daß ich mich aber auch total auf dem Holzweg befinde.
Die Syntax zum Entpacken könnte halbwegs richtig sein, zumindest bekomme ich nur den Fehler "Datei nicht gefunden".

01.
Dim fso, folder, file, ZipParts 
02.
 
03.
lw = Left( WScript.ScriptFullName, 2 ) 
04.
root = lw & "\gmd" 
05.
bin = root & "\bin" 
06.
cfg = bin & "\cfg" 
07.
ext = bin & "\ext" 
08.
lg = bin & "\log" 
09.
data = root & "\data" 
10.
input = root & "\input" 
11.
inc = input & "\coa" 
12.
inr = input & "\raw" 
13.
 
14.
ton = chr(007) 
15.
ext = "zip" 
16.
i = 0 
17.
 
18.
Call Logging ("Start program") 
19.
 
20.
Set fso = CreateObject("Scripting.Filesystemobject") 
21.
Set folder = fso.GetFolder(data) 
22.
 
23.
	For Each file In folder.Files 
24.
		If fso.GetExtensionName(file) = ext Then 
25.
			ZipParts = Split(fso.GetFileName(file)," ") 
26.
			i = i + 1 
27.
		End If 
28.
	Next 
29.
 
30.
	If i = 0 Then 
31.
		Call Logging ("Zip-File(s) not available") 
32.
	Else 
33.
		Call Logging ("process " & ZipParts(1) & " of " & ZipParts(0)) 
34.
	End If 
35.
 
36.
Set WshShell = CreateObject("WScript.Shell") 
37.
	If i > 0 Then 
38.
		If ZipParts(2) = "coa.zip" Then 
39.
			WshShell.Run ext & "\7z.exe e " & data & "\" & ZipParts(0)& "*.zip -y -o" & inc & "\" & ZipParts(1) ,0,True 
40.
		Else 
41.
			WshShell.Run ext & "\7z.exe e " & data & "\" & ZipParts(0)& "*.zip -y -o" & inr & "\" & ZipParts(1) ,0,True 
42.
		End If 
43.
	End If 
44.
 
45.
WshShell.Run "cscript //nologo " & bin & "\getData.vbs " & cfg & "\xyz650.ini",0,true 
46.
WshShell.Run "cscript //nologo " & bin & "\getData.vbs " & cfg & "\xyz660.ini",0,true 
47.
WshShell.Run "cscript //nologo " & bin & "\getData.vbs " & cfg & "\xyz670.ini",0,true 
48.
WshShell.Run "cmd /c @echo " & ton, 0 
49.
WshShell.Run bin & "\GMDevents.hta",0,True 
50.
 
51.
Set WshShell = Nothing 
52.
Set folder = Nothing 
53.
Set fso = Nothing 
54.
WScript.Quit 
55.
 
56.
Sub Logging(ByRef sMsg) 
57.
Dim oFSO, EventMSG, EventTime 
58.
EventTime = Now 
59.
 
60.
Set oFSO = CreateObject("Scripting.FileSystemObject")	 
61.
Set EventMSG = oFSO.OpenTextFile(lg & "\Events.log",8,true) 
62.
 
63.
EventMSG.WriteLine "[" & EventTime & "] [FlowControl] [Event: " & sMsg & "]" 
64.
EventMSG.Close 
65.
 
66.
Set EventMSG = Nothing 
67.
Set oFSO = Nothing 
68.
End Sub
Ich würde mich sehr freuen wenn mich jemand in die richtige Richtung schuppsen könnte.
In einem anderen Schritt (muß aber nicht) wäre vieleicht ein Loop ganz sinnvoll.
Also das Script abarbeiten bis zum Schluss, zurück springen und schauen ob es weitere Zip's gib und ggf. das Ganze wieder von vorn beginnen.
Wäre aber auch nur ein schickes Feature - neu starten geht zur Not auch

LG
amn.ssy

P.S. aus gg. Anlass: wie Eingangs schon erwähnt, der Code ist clean!
Mitglied: Eintagsfliege
07.06.2014 um 14:44 Uhr
Hallo Uwe!

Naja, zunächst solltest Du in Deinem VB-Script die Codezeile 7 und Codezeile 15 nochmal überdenken

Und wehe Du löschst nochmal einen Deiner Beiträge, dann gibt's was auf die Ohren


Grüße Dieter
Bitte warten ..
Mitglied: amn.ssy
07.06.2014, aktualisiert um 15:08 Uhr
Naja, zunächst solltest Du in Deinem VB-Script die Codezeile 7 und Codezeile 15 nochmal überdenken

Oh - Mann wie doof ist das denn ... war mir bis dahin nicht aufgefallen.

und wehe Du löschst nochmal einen Deiner Beiträge, dann gibt's was auf die Ohren

Würd ich nie (mehr) tun ...

Gruß
amn|uwe
Bitte warten ..
Mitglied: Eintagsfliege
07.06.2014 um 17:33 Uhr
Hallo Uwe!

Von einigen Fehlern mal abgesehen, liegen die *.zip-Dateien nun in
01.
\GMD\Data
oder in
01.
\GMD\Data\1101
so würde es zumindest Deine Run-Zeile zum entpacken erwarten? Und wenn ja, woher kommt dann die '1101'?

Grüße Dieter
Bitte warten ..
Mitglied: amn.ssy
07.06.2014, aktualisiert um 18:42 Uhr
Hi,

die Zip-Dateien liegen in \GMD\Data und sollen noch \Input\raw\... bzw \Input\coa\... je nach dem.
Ich bin jetzt mal zumindest etwas weiter gekommen.
Die bzw. das korekte Verzeichnis wird angelegt.
Leider habe ich immer nur die letzte Zip_Datei im Pool. indiesem Fall die 1101 xyz 670.zip
Schmeiss ich alle anderen raus bis auf 1101 xyz 670 coa.zip, dann ist dies die letzte und auch hier wird das Verzeichnis an der richtigen Stelle angelegt.

Bis dahin sieht das so aus:

01.
Dim fso, folder, file, ZipParts 
02.
 
03.
lw = Left( WScript.ScriptFullName, 2 ) 
04.
root = lw & "\gmd" 
05.
bin = root & "\bin" 
06.
cfg = bin & "\cfg" 
07.
ext = bin & "\ext" 
08.
lg = bin & "\log" 
09.
data = root & "\data" 
10.
input = root & "\input" 
11.
inc = input & "\coa" 
12.
inr = input & "\raw" 
13.
 
14.
ton = chr(007) 
15.
i = 0 
16.
 
17.
Call Logging ("Start program") 
18.
 
19.
Set fso = CreateObject("Scripting.Filesystemobject") 
20.
Set folder = fso.GetFolder(data) 
21.
 
22.
	For Each file In folder.Files 
23.
		If fso.GetExtensionName(file) = "zip" Then 
24.
			ZipParts = Split(fso.GetFileName(file)," ") 
25.
			Pstrenght = Left (ZipParts(2),3) 
26.
			i = i + 1 
27.
		End If 
28.
	Next 
29.
 
30.
	If i = 0 Then 
31.
		Call Logging ("Zip-File(s) not available") 
32.
	Else 
33.
		Call Logging ("process " & ZipParts(1) & " of " & ZipParts(0)) 
34.
	End If 
35.
	 
36.
Set WshShell = CreateObject("WScript.Shell") 
37.
	If i > 0 Then 
38.
		If ZipParts(UBound(ZipParts)) = "coa.zip" Then 
39.
			If Not fso.FolderExists(inc & "\" & ZipParts(1) & " " & Pstrenght) Then 
40.
				Set folder = fso.CreateFolder(inc & "\" & ZipParts(1) & " " & Pstrenght) 
41.
			End If  
42.
			WshShell.Run ext & "\7z.exe e " & data & "\" & ZipParts(0)& "*.zip -y -o" & " " & inc & "\" & ZipParts(1) & " " & Pstrenght,0,True 
43.
		Else 
44.
			If Not fso.FolderExists(inr & "\" & ZipParts(1) & " " & Pstrenght) Then 
45.
				Set folder = fso.CreateFolder(inr & "\" & ZipParts(1) & " " & Pstrenght) 
46.
			End If  
47.
			WshShell.Run ext & "\7z.exe e " & data & "\" & ZipParts(0)& "*.zip -y -o" & " " & inr & "\" & ZipParts(1) & " " & Pstrenght,0,True 
48.
		End If 
49.
	End If 
50.
 
51.
WshShell.Run "cscript //nologo " & bin & "\getData.vbs " & cfg & "\xyz650.ini",0,true 
52.
WshShell.Run "cscript //nologo " & bin & "\getData.vbs " & cfg & "\xyz660.ini",0,true 
53.
WshShell.Run "cscript //nologo " & bin & "\getData.vbs " & cfg & "\xyz670.ini",0,true 
54.
WshShell.Run "cmd /c @echo " & ton, 0 
55.
WshShell.Run bin & "\GMDevents.hta",0,True 
56.
 
57.
Set WshShell = Nothing 
58.
Set folder = Nothing 
59.
Set fso = Nothing 
60.
WScript.Quit 
61.
 
62.
Sub Logging(ByRef sMsg) 
63.
Dim oFSO, EventMSG, EventTime 
64.
EventTime = Now 
65.
 
66.
Set oFSO = CreateObject("Scripting.FileSystemObject")	 
67.
Set EventMSG = oFSO.OpenTextFile("F:\GMD\bin\log\Events.log",8,true) 
68.
 
69.
EventMSG.WriteLine "[" & EventTime & "] [FlowControl] [Event: " & sMsg & "]" 
70.
EventMSG.Close 
71.
 
72.
Set EventMSG = Nothing 
73.
Set oFSO = Nothing 
74.
End Sub
Ich vermute mal ich muß ein zweites mal über das Verzeichis mit den Zip-Dateien bzw. die Zeilen ab 36\37 in eine Schleife packen.
Die String zum entpacken hab ich mir mal ausgeben lassen. Sieht auf den ersten Blick richtig aus, nur entpackt wird trotzdem nicht.
Mal davon abgesehen wo ich wie in der Batch @zipfilelist unterbringe.

Gruß
amn|uwe
Bitte warten ..
Mitglied: amn.ssy
07.06.2014 um 19:05 Uhr
Mein String für 7z sieht übrigens so aus (hab iihn mir gerade im Logging ausgeben lassen):
01.
F:\gmd\bin\ext\7z.exe e F:\gmd\data\1101*.zip -y -o F:\gmd\input\raw\xyz 670 @F:\gmd\bin\cfg\zipfilelist.txt
Entpackt wird leider nicht

01.
... 
02.
Call Logging (ext & "\7z.exe e " & data & "\" & ZipParts(0)& "*.zip -y -o" & " " & inr & "\" & ZipParts(1) & " " & Pstrenght & " @" & cfg & "\zipfilelist.txt") 
03.
 
04.
Set WshShell = CreateObject("WScript.Shell") 
05.
	If i > 0 Then 
06.
		If ZipParts(UBound(ZipParts)) = "coa.zip" Then 
07.
			If Not fso.FolderExists(inc & "\" & ZipParts(1) & " " & Pstrenght) Then 
08.
				Set folder = fso.CreateFolder(inc & "\" & ZipParts(1) & " " & Pstrenght) 
09.
			End If  
10.
			WshShell.Run ext & "\7z.exe e " & data & "\" & ZipParts(0)& "*.zip -y -o" & " " _  
11.
			& inc & "\" & ZipParts(1) & " " & Pstrenght,0,True 
12.
		Else 
13.
			If Not fso.FolderExists(inr & "\" & ZipParts(1) & " " & Pstrenght) Then 
14.
				Set folder = fso.CreateFolder(inr & "\" & ZipParts(1) & " " & Pstrenght) 
15.
			End If  
16.
			WshShell.Run ext & "\7z.exe e " & data & "\" & ZipParts(0)& "*.zip -y -o" & " " _ 
17.
			& inr & "\" & ZipParts(1) & " " & Pstrenght & " @" & cfg & "\zipfilelist.txt",0,True 
18.
		End If 
19.
	End If 
20.
...
Bitte warten ..
Mitglied: Eintagsfliege
07.06.2014 um 19:20 Uhr
Hallo Uwe!

OK, mein Fehler, habe ich falsch interpretiert und zwar:
01.
data & "\" & ZipParts(0)& "*.zip 
02.
 
03.
'als: 
04.
\GMD\Data\1101\*.zip 
05.
 
06.
'anstatt: 
07.
F:\gmd\data\1101*.zip 
Warum das entpacken aller *.zip nicht funktioniert, ist mir allerdings schon klar...

Grüße Dieter
Bitte warten ..
Mitglied: amn.ssy
07.06.2014, aktualisiert um 19:48 Uhr
Hallo Dieter,

der String ... F:\gmd\data\1101*.zip funktioniert in der Batch doch auch!

01.
for %%f in (%data%%ym%*.zip) do ( 
02.
 set "fname=%%~nxf" 
03.
 :: set "prdct=!fname:~5,10!" 
04.
  if /i "!fname:~-7!" == "coa.zip" ( 
05.
    "%ext%7z" e "%%f" -y -o"%inc%*"  
06.
  ) else ( 
07.
    "%ext%7z" e "%%f" -y -o"%inr%*" @%cfg%zipfilelist.txt 
08.
09.
) >>NUL
ym steht für z.B. 1101 und wird in der batch via Input eingegeben, nach dem es zuvor so ausgelesen wird:

01.
set /A cntdata=0 
02.
 
03.
for %%f in (%data%*.zip) do set /A cntdata+=1 
04.
if "%cntdata%"=="0" call :ErrorMSG_Zip 
05.
 
06.
set "FirstMonth=" 
07.
for /f "delims=" %%i in ('dir /b/a-d "%data%"') do if not defined FirstMonth set "FirstMonth=%%~ni" 
08.
set "FirstMonth=%FirstMonth:~,4%" 
09.
set "LastM=" 
10.
for /f "delims=" %%i in ('dir /b/a-d "%data%"^|findstr /ibv "%FirstMonth%"') do set "LastM=%%~ni" 
11.
set "LastMonth=%LastM:~,4%" 
12.
if defined LastM ( 
13.
  echo more than one dataset to process 
14.
	echo first dataset: "%FirstMonth%" 
15.
  echo last dataset= "%LastMonth%" 
16.
) else ( 
17.
	echo only one dataset to process 
18.
	echo first dataset: "%FirstMonth%" 
19.
20.
 
21.
set In=%wks%\GetInput.vbs 
22.
>%In% echo Set args=WScript.Arguments:WScript.Echo InputBox(args(0), args(1)) 
23.
:Loop 
24.
set  "ym=" & for /f "delims=" %%i in ('cscript //nologo %In% "Input yymm" "Input Year and Month" ""') do set "ym=%%i" 
25.
If not defined ym goto :Loop
Wie gesagt, ohne wirklich den Plan zu haben: Ich glaub da muß ne Schleife rum, die nur 1101 (also den ersten verfügbaren Packen) abgreift.
Packt man das ganze Prozedere komplett in eine Schleife müßte sogar mehrere Jahre\Monate abgearbeitet werden können.
Natürlich müßen die erzeugten Daten dann in den Store oder gelöscht werden, da das Rohmaterial ja noch in den Zips vorhanden ist.
Mit Ausnahme der Daten die durch Getdata.vbs erzeugt werden.
Das spart dann auch gleich etwas Platz auf dem Shared-Drive wo das Zeug später gesichert wird.

Gruß
amn|uwe
Bitte warten ..
Mitglied: Eintagsfliege
07.06.2014 um 20:15 Uhr
Hallo Uwe!

Wie gesagt, ohne wirklich den Plan zu haben: Ich glaub da muß ne Schleife rum, die nur 1101 (also den ersten verfügbaren Packen) abgreift.
Man achte in meinem letzten Kommentar auf das Wort aller

Mit der Schleife hast Du schon recht und dass Entpacken läuft bei mir schon, mir ist nur noch unklar, ob die beiden Scripts (vbs, hta) wirklich im Ordner 'Bin' liegen oder nicht doch vielleicht im Ordner 'Ext'?

Für Heute mache ich aber erst mal Schluss

Grüße Dieter
Bitte warten ..
Mitglied: amn.ssy
07.06.2014, aktualisiert um 21:01 Uhr
Hallo Dieter,

VB-Scripte und hta liegen in \bin
Unter \bin\ext hab ich die externen Tools wie PDF2Text oder 7z

Schönen "Feierabend"

Grüße
amn|uwe
Bitte warten ..
Mitglied: Eintagsfliege
LÖSUNG 08.06.2014, aktualisiert um 22:27 Uhr
Hallo Uwe!

So, sollte es funktionieren:
01.
'Main Begin 
02.
    'Dim... 
03.
     
04.
    sLw = Left(WScript.ScriptFullName, 2) 
05.
     
06.
    sRoot = sLw & "\gmd" 
07.
    sBin = sRoot & "\Bin" 
08.
    sData = sRoot & "\Data" 
09.
    sInput = sRoot & "\Input" 
10.
    sCfg = sBin & "\Cfg" 
11.
    sExt = sBin & "\Ext" 
12.
    sInC = sInput & "\coa" 
13.
    sInR = sInput & "\raw" 
14.
     
15.
    s7z = sExt & "\7z.exe" 
16.
    sLog = sBin & "\log\Events.log" 
17.
    sVbs = sBin & "\GetData.vbs" 
18.
    sHta = sBin & "\GMDevents.hta" 
19.
     
20.
    sQ = Chr(34) 
21.
     
22.
    sLogText = GetLogText("start program") 
23.
     
24.
    Set oShell = CreateObject("WScript.Shell") 
25.
    Set oFso = CreateObject("Scripting.Filesystemobject") 
26.
     
27.
    iCount = 0 
28.
     
29.
    For Each oFile In oFso.GetFolder(sData).Files 
30.
        If LCase(oFso.GetExtensionName(oFile.Name)) = "zip" Then 
31.
            aZipParts = Split(oFso.GetBaseName(oFile.Path), " ", 2) 
32.
            sLogText = sLogText & GetLogText("process " & aZipParts(1) & " of " & aZipParts(0)) 
33.
             
34.
            If InStr(1, oFile.Name, "coa", vbTextCompare) > 0 Then 
35.
                sFolderOut = sQ & oFso.BuildPath(sInC, aZipParts(1)) & sQ 
36.
            Else 
37.
                sFolderOut = sQ & oFso.BuildPath(sInR, aZipParts(1)) & sQ 
38.
            End If 
39.
         
40.
            CmdLine = sQ & s7z & sQ & " e " & sQ & oFile.Path & sQ & " -y -o" & sFolderOut 
41.
            oShell.Run CmdLine, 0, True:  iCount = iCount + 1 
42.
        End If 
43.
    Next 
44.
     
45.
    If iCount = 0 Then 
46.
        sLogText = sLogText & GetLogText("Zip-oFile(s) not available") 
47.
        oFso.CreateTextFile(sLog).Write sLogText 
48.
    Else 
49.
        With oShell 
50.
            sLogText = sLogText & "?" 
51.
            oFso.CreateTextFile(sLog).Write sLogText 
52.
             
53.
            For Each sName In Array("xyz650", "xyz660", "xyz670") 
54.
                CmdLine = sQ & sVbs & sQ & " " & sQ & oFso.BuildPath(sCfg, sName & ".ini") & sQ 
55.
               .Run "cscript.exe " & CmdLine, 0, True 
56.
            Next 
57.
            
58.
           .Run "cmd /c @echo " & Chr(7), 0, False 
59.
           .Run sQ & sHta & sQ, 0, False 
60.
        End With 
61.
    End If 
62.
     
63.
    Set oFso = Nothing 
64.
    Set oShell = Nothing 
65.
'Main End 
66.
 
67.
Function GetLogText(ByRef sMsg) 
68.
    GetLogText = "[" & Now & "] [FlowControl] [Event: " & sMsg & "]" & vbNewLine 
69.
End Function
Grüße Dieter

[edit] 2 Fehler korrigiert [/edit]
Bitte warten ..
Mitglied: amn.ssy
08.06.2014, aktualisiert um 23:06 Uhr
Hallo Dieter,

erstmal vielen Dank für die Mühe die du dir gemacht hast, sie wird ganz sicher nicht vergeblich gewesen sein
Ich habe das Script heute früh und heute Abend ausgiebig getestet und es läuft wie's Lottchen.
Im Zusammenhang mit getData.vbs benötigt das Tool lt. Log jetzt mal kaum mehr als 15 sek. und den ganzen Schladeradatsch abzuarbeiten - GEIL
Die 2 Fehler die du wohl noch korrigiert hast, nehme ich an bezogen sich auf "sCfg" und "Zip-oFile(s)", zumindest war mir das heute früh aufgefallen und ich hab's noch vorm ersten Lauf gefixt.
Oder war da noch was anderes? Mir ist jedenfalls nichts weiteres aufgefallen.
Zwei, drei Fragen hätte ich noch zum Verständnis und vieleicht auch zum was dazu lernen:
Wo liegt der Vorteil beim String CMDLine gegenüber WshShell.Run?
Du hast dort auch sQ (CHR(34)) eingeführt. Was macht das ganze, wieso dieser Ansatz?
Und eine letzte Frage:
Ich habe rufe\schreibe auch in getData das Logging mit Call Logging ("blablub") auf und "blablub" wird auch geschrieben.
Wieso gehst du diesen Weg: sLogText = sLogText & GetLogText("Zip-File(s) not available")?

Ein kleiner Nachteil habe ich auch entdeckt, den man aber händeln kann, wenn man's weiß:
Es dürfen nur Zip-Dateien im Ordner \Data sein, die auch zusammen gehören (z.B. nur 1101 ...), also ein Monat.
Wenn, wie getestet, dort auch noch 1102, 1103, 1205, usw. liegen, werden rigoros alle Zip-Dateien in die korrekten Order entpackt.
Und dann knallt's definitiv bei getData, aber dort sind solche Fehler ja schon mustergültig abgefangen
Wie gesagt, kleiner Nachteil. Wenn man's weiß, kann man das auch berücksichtigen.
Der Normalfall sieht sowieso so aus, daß nur die Dateien aus dem jeweiligen Vormonat in \Data zu verarbeitung liegen sollten.
Liegen dort mehrere Monate ist das ein eindeutiges Zeichen dafür, daß jemand (Datenlieferant oder Datenverarbeiter) über einen längeren Zeitraum seine Arbeit nicht gemacht hat.
Wofür es ja durchaus gute Gründe geben kann.

Nochmals vielen Dank für die Mühe.

LG

amn|uwe
Bitte warten ..
Mitglied: Eintagsfliege
LÖSUNG 09.06.2014, aktualisiert um 10:18 Uhr
Hallo Uwe!

Die 2 Fehler die du wohl noch korrigiert hast, nehme ich an bezogen sich auf "sCfg" und "Zip-oFile(s)", zumindest war mir das heute früh aufgefallen und ich hab's noch vorm ersten Lauf gefixt.
Knapp daneben, es war einmal das 'sCfg' in der Pfadangabe und das bei mir fehlende 'cscript.exe' für 'GetData.vbs'. Das andere im Log-Text hatte ich sogar noch übersehen

Wo liegt der Vorteil beim String CMDLine gegenüber WshShell.Run?
Das ist nur der Übersicht wegen (lange Zeilen)

Du hast dort auch sQ (CHR(34)) eingeführt. Was macht das ganze, wieso dieser Ansatz?
Die sQ allias Chr(34) sind wichtig, für den Fall, dass Pfadangaben Leerzeichen enthalten, die ja in der Kommandozeile als Argument-Trennzeichen angesehen werden

Ich habe rufe\schreibe auch in getData das Logging mit Call Logging ("blablub") auf und "blablub" wird auch geschrieben. Wieso gehst du diesen Weg: sLogText = sLogText & GetLogText("Zip-File(s) not available")?
Naja, das sammeln der einzelnen Meldungen und erst am Ende in die Datei schreiben, verhindert das die Datei mehrmals erneut geöffnet und geschlossen wird. Performance und so...

Wenn, wie getestet, dort auch noch 1102, 1103, 1205, usw. liegen, werden rigoros alle Zip-Dateien in die korrekten Order entpackt.
Daran hatte ich auch schon gedacht, aber da Du dies in den Ziel-Ordnern nicht berücksichtigst hast, habe ich es einfach mal ignoriert Bevor man das noch irgendwie mit einbaut, müsstest Du dir erstmal überlegen, wie Du das in Punkto Ausgabe dann handeln willst?

Grüße Dieter
Bitte warten ..
Mitglied: amn.ssy
09.06.2014 um 11:22 Uhr
Hallo Dieter,

vielen Dank für die "Erhellung"

Der Idealfall wäre, daß nach jedem Durchlauf die Ergebnisdaten und die Zip-Datein gleich in die Entsprechenden Zielordner auf dem Sharedrive verschoben werden.
Um die jeweils richtigen Ordner dafür zu finden sind im Prinzip schon alle Daten in den Variablen versteckt.
Ich müßte mal schauen, auf ich meine Testumgebung hier mal Clean mache und dann ein Screenshot.

Exemplarisch für xyz 800 sieht das etwa so aus:

X:\AnB_TN\00 DNS\03-14 Monthly\GBL\xyz N950\01 - JAN 14\Data\Zip

Knackpunkte fangen erst ab "14 Monthly" an.
Das Pferd von hinten aufgezäumt müssen später die Zip-Datein nach ...\Data\Zip und die XLSX die aus getData resultieren und im Store\xls liegen nach \Data
Problematisch erscheint mir das erkennen was wo hin muß.
Der Pfad bis X:\AnB_TN\00 DNS\03- bleibt sonächst einmal immer gleich. Die 03 steht nur als Ordnungszahl da um dem ganzen eine logische Struktur zu geben.
Die 14 vor Monthly steht für das bearbeitete Jahr (also 2014). Etwas ähnlichen habe ich dann vor \Data bei JAN 14.
Die Daten die da rein gehören fangen demnach alle mit 1401 an.
Soweit wäre das u.U. sogar für so'n DAU wie mich noch umsetzbar (vieleicht nicht elegant, aber funktionabel ).
Richtig spannend wird es im Abschnitt \GBL\xyz N950.
Hier steht die N950 z.B. für 1401 xyz 670 und auch nur dort kommen auch zusätzlich die 1401 xyz 670 coa vor.
(Nach Data\Zip würden demnach auch 2 Zip Dateien verschoben werden 1401 xyz 670.zip und 1401 xyz 670 coa.zip)
Zumindest mal derzeit. Für xyz 650 gilt das Verzeichnis xyz P278 und für xyz P280.
Die Kombination aus xyz P278, xyz P280 oder xyz N950 kann ausschließlich nur für den Ordner \GBL\ gelten.

Die 3 betreffenden Ordner im aktuellen Fall würden bis zur letzten Verzweigung so aussehen:

X:\AnB_TN\00 DNS\03-14 Monthly\GBL\xyz N950\01 - JAN 14\Data\Zip
X:\AnB_TN\00 DNS\03-14 Monthly\GBL\xyz P278\01 - JAN 14\Data\Zip
X:\AnB_TN\00 DNS\03-14 Monthly\GBL\xyz P280\01 - JAN 14\Data\Zip

Natürlich könnte man das alles auch sehr fest verdrahten, da es im Moment nur um drei bestimmte "Gruppen" geht.
Wenn es jedoch gelingt soviel Infos wie möglich aus den vorhandenen Zip-Dateien in Variablen zu packen wäre das insoweit flexibel, daß auch andere Datengruppen auf die gleiche Weise mit der Steuerdatei bearbeitet werden können.
Sogar das "Programm" getData ist schon so genial , daß nur wenig am Code geändert werden muß um auch andere "Gruppen" zu verarbeiten.
In einigen Fällen muß nur die INI angepasst bzw hinzugefügt werden.

Es müßten also m.E. nur nach dem Entpacken die Original Zip-Dateien verschoben (ab Z44) werden und ab Z57 die XLSX aus GMD\Store\XLS.
Danach müßte das Steuerscript wieder von neuem starten sofern noch verarbeitbare Zip-Dateien in GMD\Data liegen.

Grüße
amn|uwe

P.S. hab mir gerade eine rudimentäre Ordnerüberwachung für GMD\Data gebastelt. Ist ziemlich simpel und funktioniert soweit
Wenn da Zip-Dateien abgelegt werden und die Steuerdatei (der Prozess) nicht läuft wird er angeworfen.
Wenn der Prozess läuft passiert erstmal nicht und da es eine Do Loop mit 5 min. Intervall ist schaut er halt später nochmal rein.
Wenn ich nicht was entscheidendens vergessen habe müssen die Zip-Dateien nur noch abgelegt werden und rest geht von alleine
Bitte warten ..
Mitglied: Eintagsfliege
09.06.2014, aktualisiert 10.06.2014
Hallo Uwe!

OK, ich werde Deinen letzten Kommentar so um die 25 mal durchlesen. Vielleicht kommt dann ja die erhoffte Erleuchtung

In meinem Alter kann das als etwas länger dauern

Grüße Dieter
Bitte warten ..
Mitglied: amn.ssy
09.06.2014, aktualisiert um 15:43 Uhr
äh welchen kommentar?
PS oder der Roman darüber?

In meinem Alter kann das als etwas länger dauern
was die kognitive Leistungfähigkeit betrifft bin ich gegen dich war scheinlich schon scheintod

[Insider-Joke ]
Vieleicht kann ich dir ja eine ingeneurmäßige Zeichnung erstellen
Bitte warten ..
Mitglied: Eintagsfliege
09.06.2014 um 16:22 Uhr
Hallo Uwe!

äh welchen kommentar?
Na, der (Roman) von 11:22 Uhr

Vieleicht kann ich dir ja eine ingeneurmäßige Zeichnung erstellen face-wink
Das wäre der Idealfall, aber dann bitte ingenieurmäßig

Grüße Dieter
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

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

Ähnliche Inhalte
VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

Windows Server
Server sehr langsam bei vielen kleinen Dateien (5)

Frage von MichiBLNN zum Thema Windows Server ...

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