amn.ssy
Goto Top

VBS: Zip-Dateien klassifizieren und bestimmt Stelle entpacken

Hallo,

mit dem nachfolgenden Code (clean face-wink) 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:

set root=%~dp0
set bin=%~dp0bin\
set cfg=%bin%cfg\
set ext=%bin%ext\
set log=%bin%log\
set data=%~dp0data\
set inc=%~dp0input\coa\
set inr=%~dp0input\raw\
set wks=%~dp0temp\
set stxTp=%~dp0store\xls\

set /A cntdata=0

for %%f in (%data%*.zip) do set /A cntdata+=1
if "%cntdata%"=="0" call :ErrorMSG_Zip  

set "FirstMonth="  
for /f "delims=" %%i in ('dir /b/a-d "%data%"') do if not defined FirstMonth set "FirstMonth=%%~ni"  
set "FirstMonth=%FirstMonth:~,4%"  
set "LastM="  
for /f "delims=" %%i in ('dir /b/a-d "%data%"^|findstr /ibv "%FirstMonth%"') do set "LastM=%%~ni"  
set "LastMonth=%LastM:~,4%"  
if defined LastM (
  echo more than one dataset to process
	echo first dataset: "%FirstMonth%"  
  echo last dataset= "%LastMonth%"  
) else (
	echo only one dataset to process
	echo first dataset: "%FirstMonth%"  
)

set In=%wks%\GetInput.vbs
>%In% echo Set args=WScript.Arguments:WScript.Echo InputBox(args(0), args(1))
:Loop
set  "ym=" & for /f "delims=" %%i in ('cscript //nologo %In% "Input yymm" "Input Year and Month" ""') do set "ym=%%i"  
If not defined ym goto :Loop

call :UnzipMSG

for %%f in (%data%%ym%*.zip) do (
 set "fname=%%~nxf"  
 :: set "prdct=!fname:~5,10!" 
  if /i "!fname:~-7!" == "coa.zip" (  
    "%ext%7z" e "%%f" -y -o"%inc%*"   
  ) else (
    "%ext%7z" e "%%f" -y -o"%inr%*" @%cfg%zipfilelist.txt  
  )
) >>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".

Dim fso, folder, file, ZipParts

lw = Left( WScript.ScriptFullName, 2 )
root = lw & "\gmd"  
bin = root & "\bin"  
cfg = bin & "\cfg"  
ext = bin & "\ext"  
lg = bin & "\log"  
data = root & "\data"  
input = root & "\input"  
inc = input & "\coa"  
inr = input & "\raw"  

ton = chr(007)
ext = "zip"  
i = 0

Call Logging ("Start program")  

Set fso = CreateObject("Scripting.Filesystemobject")  
Set folder = fso.GetFolder(data)

	For Each file In folder.Files
		If fso.GetExtensionName(file) = ext Then
			ZipParts = Split(fso.GetFileName(file)," ")  
			i = i + 1
		End If
	Next

	If i = 0 Then
		Call Logging ("Zip-File(s) not available")  
	Else
		Call Logging ("process " & ZipParts(1) & " of " & ZipParts(0))  
	End If

Set WshShell = CreateObject("WScript.Shell")  
	If i > 0 Then
		If ZipParts(2) = "coa.zip" Then  
			WshShell.Run ext & "\7z.exe e " & data & "\" & ZipParts(0)& "*.zip -y -o" & inc & "\" & ZipParts(1) ,0,True  
		Else
			WshShell.Run ext & "\7z.exe e " & data & "\" & ZipParts(0)& "*.zip -y -o" & inr & "\" & ZipParts(1) ,0,True  
		End If
	End If

WshShell.Run "cscript //nologo " & bin & "\getData.vbs " & cfg & "\xyz650.ini",0,true  
WshShell.Run "cscript //nologo " & bin & "\getData.vbs " & cfg & "\xyz660.ini",0,true  
WshShell.Run "cscript //nologo " & bin & "\getData.vbs " & cfg & "\xyz670.ini",0,true  
WshShell.Run "cmd /c @echo " & ton, 0  
WshShell.Run bin & "\GMDevents.hta",0,True  

Set WshShell = Nothing
Set folder = Nothing
Set fso = Nothing
WScript.Quit

Sub Logging(ByRef sMsg)
Dim oFSO, EventMSG, EventTime
EventTime = Now

Set oFSO = CreateObject("Scripting.FileSystemObject")	  
Set EventMSG = oFSO.OpenTextFile(lg & "\Events.log",8,true)  

EventMSG.WriteLine "[" & EventTime & "] [FlowControl] [Event: " & sMsg & "]"  
EventMSG.Close

Set EventMSG = Nothing
Set oFSO = Nothing
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 face-wink

LG
amn.ssy

P.S. aus gg. Anlass: wie Eingangs schon erwähnt, der Code ist clean!

Content-Key: 240386

Url: https://administrator.de/contentid/240386

Printed on: April 20, 2024 at 03:04 o'clock

Mitglied: 116301
116301 Jun 07, 2014 at 12:44:07 (UTC)
Goto Top
Hallo Uwe!

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

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


Grüße Dieter
Member: amn.ssy
amn.ssy Jun 07, 2014 updated at 13:08:21 (UTC)
Goto Top
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 ... face-wink

Gruß
amn|uwe
Mitglied: 116301
116301 Jun 07, 2014 at 15:33:40 (UTC)
Goto Top
Hallo Uwe!

Von einigen Fehlern mal abgesehen, liegen die *.zip-Dateien nun in
\GMD\Data
oder in
\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
Member: amn.ssy
amn.ssy Jun 07, 2014 updated at 16:42:39 (UTC)
Goto Top
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:

Dim fso, folder, file, ZipParts

lw = Left( WScript.ScriptFullName, 2 )
root = lw & "\gmd"  
bin = root & "\bin"  
cfg = bin & "\cfg"  
ext = bin & "\ext"  
lg = bin & "\log"  
data = root & "\data"  
input = root & "\input"  
inc = input & "\coa"  
inr = input & "\raw"  

ton = chr(007)
i = 0

Call Logging ("Start program")  

Set fso = CreateObject("Scripting.Filesystemobject")  
Set folder = fso.GetFolder(data)

	For Each file In folder.Files
		If fso.GetExtensionName(file) = "zip" Then  
			ZipParts = Split(fso.GetFileName(file)," ")  
			Pstrenght = Left (ZipParts(2),3)
			i = i + 1
		End If
	Next

	If i = 0 Then
		Call Logging ("Zip-File(s) not available")  
	Else
		Call Logging ("process " & ZipParts(1) & " of " & ZipParts(0))  
	End If
	
Set WshShell = CreateObject("WScript.Shell")  
	If i > 0 Then
		If ZipParts(UBound(ZipParts)) = "coa.zip" Then  
			If Not fso.FolderExists(inc & "\" & ZipParts(1) & " " & Pstrenght) Then  
				Set folder = fso.CreateFolder(inc & "\" & ZipParts(1) & " " & Pstrenght)  
			End If 
			WshShell.Run ext & "\7z.exe e " & data & "\" & ZipParts(0)& "*.zip -y -o" & " " & inc & "\" & ZipParts(1) & " " & Pstrenght,0,True  
		Else
			If Not fso.FolderExists(inr & "\" & ZipParts(1) & " " & Pstrenght) Then  
				Set folder = fso.CreateFolder(inr & "\" & ZipParts(1) & " " & Pstrenght)  
			End If 
			WshShell.Run ext & "\7z.exe e " & data & "\" & ZipParts(0)& "*.zip -y -o" & " " & inr & "\" & ZipParts(1) & " " & Pstrenght,0,True  
		End If
	End If

WshShell.Run "cscript //nologo " & bin & "\getData.vbs " & cfg & "\xyz650.ini",0,true  
WshShell.Run "cscript //nologo " & bin & "\getData.vbs " & cfg & "\xyz660.ini",0,true  
WshShell.Run "cscript //nologo " & bin & "\getData.vbs " & cfg & "\xyz670.ini",0,true  
WshShell.Run "cmd /c @echo " & ton, 0  
WshShell.Run bin & "\GMDevents.hta",0,True  

Set WshShell = Nothing
Set folder = Nothing
Set fso = Nothing
WScript.Quit

Sub Logging(ByRef sMsg)
Dim oFSO, EventMSG, EventTime
EventTime = Now

Set oFSO = CreateObject("Scripting.FileSystemObject")	  
Set EventMSG = oFSO.OpenTextFile("F:\GMD\bin\log\Events.log",8,true)  

EventMSG.WriteLine "[" & EventTime & "] [FlowControl] [Event: " & sMsg & "]"  
EventMSG.Close

Set EventMSG = Nothing
Set oFSO = Nothing
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
Member: amn.ssy
amn.ssy Jun 07, 2014 at 17:05:29 (UTC)
Goto Top
Mein String für 7z sieht übrigens so aus (hab iihn mir gerade im Logging ausgeben lassen):
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 face-sad

...
Call Logging (ext & "\7z.exe e " & data & "\" & ZipParts(0)& "*.zip -y -o" & " " & inr & "\" & ZipParts(1) & " " & Pstrenght & " @" & cfg & "\zipfilelist.txt")  

Set WshShell = CreateObject("WScript.Shell")  
	If i > 0 Then
		If ZipParts(UBound(ZipParts)) = "coa.zip" Then  
			If Not fso.FolderExists(inc & "\" & ZipParts(1) & " " & Pstrenght) Then  
				Set folder = fso.CreateFolder(inc & "\" & ZipParts(1) & " " & Pstrenght)  
			End If 
			WshShell.Run ext & "\7z.exe e " & data & "\" & ZipParts(0)& "*.zip -y -o" & " " _   
			& inc & "\" & ZipParts(1) & " " & Pstrenght,0,True  
		Else
			If Not fso.FolderExists(inr & "\" & ZipParts(1) & " " & Pstrenght) Then  
				Set folder = fso.CreateFolder(inr & "\" & ZipParts(1) & " " & Pstrenght)  
			End If 
			WshShell.Run ext & "\7z.exe e " & data & "\" & ZipParts(0)& "*.zip -y -o" & " " _  
			& inr & "\" & ZipParts(1) & " " & Pstrenght & " @" & cfg & "\zipfilelist.txt",0,True  
		End If
	End If
...
Mitglied: 116301
116301 Jun 07, 2014 at 17:20:47 (UTC)
Goto Top
Hallo Uwe!

OK, mein Fehler, habe ich falsch interpretiert und zwar:
data & "\" & ZipParts(0)& "*.zip  

'als:  
\GMD\Data\1101\*.zip

'anstatt:  
F:\gmd\data\1101*.zip 

Warum das entpacken aller *.zip nicht funktioniert, ist mir allerdings schon klar...face-wink

Grüße Dieter
Member: amn.ssy
amn.ssy Jun 07, 2014 updated at 17:48:43 (UTC)
Goto Top
Hallo Dieter,

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

for %%f in (%data%%ym%*.zip) do (
 set "fname=%%~nxf"  
 :: set "prdct=!fname:~5,10!"  
  if /i "!fname:~-7!" == "coa.zip" (  
    "%ext%7z" e "%%f" -y -o"%inc%*"   
  ) else (
    "%ext%7z" e "%%f" -y -o"%inr%*" @%cfg%zipfilelist.txt  
  )
) >>NUL

ym steht für z.B. 1101 und wird in der batch via Input eingegeben, nach dem es zuvor so ausgelesen wird:

set /A cntdata=0

for %%f in (%data%*.zip) do set /A cntdata+=1
if "%cntdata%"=="0" call :ErrorMSG_Zip  

set "FirstMonth="  
for /f "delims=" %%i in ('dir /b/a-d "%data%"') do if not defined FirstMonth set "FirstMonth=%%~ni"  
set "FirstMonth=%FirstMonth:~,4%"  
set "LastM="  
for /f "delims=" %%i in ('dir /b/a-d "%data%"^|findstr /ibv "%FirstMonth%"') do set "LastM=%%~ni"  
set "LastMonth=%LastM:~,4%"  
if defined LastM (
  echo more than one dataset to process
	echo first dataset: "%FirstMonth%"  
  echo last dataset= "%LastMonth%"  
) else (
	echo only one dataset to process
	echo first dataset: "%FirstMonth%"  
)

set In=%wks%\GetInput.vbs
>%In% echo Set args=WScript.Arguments:WScript.Echo InputBox(args(0), args(1))
:Loop
set  "ym=" & for /f "delims=" %%i in ('cscript //nologo %In% "Input yymm" "Input Year and Month" ""') do set "ym=%%i"  
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 face-wink erzeugt werden.
Das spart dann auch gleich etwas Platz auf dem Shared-Drive wo das Zeug später gesichert wird.

Gruß
amn|uwe
Mitglied: 116301
116301 Jun 07, 2014 at 18:15:36 (UTC)
Goto Top
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 allerface-wink

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 Schlussface-wink

Grüße Dieter
Member: amn.ssy
amn.ssy Jun 07, 2014 updated at 19:01:04 (UTC)
Goto Top
Hallo Dieter,

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

Schönen "Feierabend" face-smile

Grüße
amn|uwe
Mitglied: 116301
Solution 116301 Jun 08, 2014 updated at 20:27:34 (UTC)
Goto Top
Hallo Uwe!

So, sollte es funktionieren:
'Main Begin  
    'Dim...  
    
    sLw = Left(WScript.ScriptFullName, 2)
    
    sRoot = sLw & "\gmd"  
    sBin = sRoot & "\Bin"  
    sData = sRoot & "\Data"  
    sInput = sRoot & "\Input"  
    sCfg = sBin & "\Cfg"  
    sExt = sBin & "\Ext"  
    sInC = sInput & "\coa"  
    sInR = sInput & "\raw"  
    
    s7z = sExt & "\7z.exe"  
    sLog = sBin & "\log\Events.log"  
    sVbs = sBin & "\GetData.vbs"  
    sHta = sBin & "\GMDevents.hta"  
    
    sQ = Chr(34)
    
    sLogText = GetLogText("start program")  
    
    Set oShell = CreateObject("WScript.Shell")  
    Set oFso = CreateObject("Scripting.Filesystemobject")  
    
    iCount = 0
    
    For Each oFile In oFso.GetFolder(sData).Files
        If LCase(oFso.GetExtensionName(oFile.Name)) = "zip" Then  
            aZipParts = Split(oFso.GetBaseName(oFile.Path), " ", 2)  
            sLogText = sLogText & GetLogText("process " & aZipParts(1) & " of " & aZipParts(0))  
            
            If InStr(1, oFile.Name, "coa", vbTextCompare) > 0 Then  
                sFolderOut = sQ & oFso.BuildPath(sInC, aZipParts(1)) & sQ
            Else
                sFolderOut = sQ & oFso.BuildPath(sInR, aZipParts(1)) & sQ
            End If
        
            CmdLine = sQ & s7z & sQ & " e " & sQ & oFile.Path & sQ & " -y -o" & sFolderOut  
            oShell.Run CmdLine, 0, True:  iCount = iCount + 1
        End If
    Next
    
    If iCount = 0 Then
        sLogText = sLogText & GetLogText("Zip-oFile(s) not available")  
        oFso.CreateTextFile(sLog).Write sLogText
    Else
        With oShell
            sLogText = sLogText & "?"  
            oFso.CreateTextFile(sLog).Write sLogText
            
            For Each sName In Array("xyz650", "xyz660", "xyz670")  
                CmdLine = sQ & sVbs & sQ & " " & sQ & oFso.BuildPath(sCfg, sName & ".ini") & sQ  
               .Run "cscript.exe " & CmdLine, 0, True  
            Next
           
           .Run "cmd /c @echo " & Chr(7), 0, False  
           .Run sQ & sHta & sQ, 0, False
        End With
    End If
    
    Set oFso = Nothing
    Set oShell = Nothing
'Main End  

Function GetLogText(ByRef sMsg)
    GetLogText = "[" & Now & "] [FlowControl] [Event: " & sMsg & "]" & vbNewLine  
End Function

Grüße Dieter

[edit] 2 Fehler korrigiert [/edit]
Member: amn.ssy
amn.ssy Jun 08, 2014 updated at 21:06:37 (UTC)
Goto Top
Hallo Dieter,

erstmal vielen Dank für die Mühe die du dir gemacht hast, sie wird ganz sicher nicht vergeblich gewesen sein face-wink
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 face-smile
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 face-wink
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
Mitglied: 116301
Solution 116301 Jun 09, 2014 updated at 08:18:57 (UTC)
Goto Top
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 übersehenface-wink

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

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 ignoriertface-smile 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
Member: amn.ssy
amn.ssy Jun 09, 2014 at 09:22:43 (UTC)
Goto Top
Hallo Dieter,

vielen Dank für die "Erhellung" face-smile

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 face-wink).
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 face-wink, 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. face-smile

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 face-wink
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 face-smile
Mitglied: 116301
116301 Jun 09, 2014, updated at Jun 10, 2014 at 17:19:16 (UTC)
Goto Top
Hallo Uwe!

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

In meinem Alter kann das als etwas länger dauernface-wink

Grüße Dieter
Member: amn.ssy
amn.ssy Jun 09, 2014 updated at 13:43:11 (UTC)
Goto Top
ä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 face-smile

[Insider-Joke face-smile]
Vieleicht kann ich dir ja eine ingeneurmäßige Zeichnung erstellen face-wink
Mitglied: 116301
116301 Jun 09, 2014 at 14:22:12 (UTC)
Goto Top
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äßigface-smile

Grüße Dieter