Hallo,
ich versuche derzeit eine Batch in VBS umzuschreiben und habe dabei schon durchaus ein paar Fortschritte gemacht
An der Folgenden Sache bleiche ich jedoch hängen:
Bevor der ab gebildete Code in Aktion tritt werden alle Zip-Dateien ermittelt bei denen jeweils die ersten 4 Zeichen gleich sind und angezeigt. Über ein Input können dann diese 4 Zeichen eingeben werden und 7z entpackt die Dateien analog der zipfilelist in die entsprechenden Ordner.
Nun möchte ich gerne das ganze in VBS überführen und dabei soll folgendes passieren:
- allen Zip-Dateien in \Data ermitteln deren erste 4 Zeichen gleich sind
- analog eines Teil des Dateinames der Zip im vordefinierte Ordner ein Unterordner erstellen und dort entpacken.
- endet der Zip-Name mit com.zip ändert sich der vordefinierte Ordner
Beispiel:
Im Verzeichnis Data liegen z.B 12 Zip-Dateien. Jeweils 4 beginnen mit den gleichen Zeichen
(1101 xyz 650.zip, 1101 xyz 660.zip, 1101 xyz 670.zip, 1101 xyz 670 com.zip)
Nun sollen alle Zip-Dateien die mit 1101 beginnen entpackt werden in die Unterverzeichnisse
\in\raw\xyz 650\, in\raw\xyz 660\, in\raw\xyz 670\, in\com\xyz 670 com\.
Dabei existiert bislang nur das Verzeichnis \in. Die anderen Verzeichnisse wie xyz 650 oder xyz 670 com müßten erstellt werden.
Der Input könnte erstmal entfallen, wichtig wäre daß die ersten passenden Zip-Files entpackt werden.
Im spätern Verlauf, wenn z.B. 1201, 1301, usw. da sind, müßte ich mich um einen Loop über das gesammte Script kümmern. Bis dahin kann man das Programm ja auch neu starten ;-)
Bis jetzt sieht das ganze so aus:
Soviel zur Theorie - leider endets dann auch schon
LG
amn.ssy
ich versuche derzeit eine Batch in VBS umzuschreiben und habe dabei schon durchaus ein paar Fortschritte gemacht

An der Folgenden Sache bleiche ich jedoch hängen:
Code:
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"
if /i "!fname:~-7!" == "com.zip" (
"%ext%7z" e "%%f" -y -o"%inc%*"
) else (
"%ext%7z" e "%%f" -y -o"%inr%*" @%cfg%zipfilelist.txt
)
) >>NUL
Bevor der ab gebildete Code in Aktion tritt werden alle Zip-Dateien ermittelt bei denen jeweils die ersten 4 Zeichen gleich sind und angezeigt. Über ein Input können dann diese 4 Zeichen eingeben werden und 7z entpackt die Dateien analog der zipfilelist in die entsprechenden Ordner.
Nun möchte ich gerne das ganze in VBS überführen und dabei soll folgendes passieren:
- allen Zip-Dateien in \Data ermitteln deren erste 4 Zeichen gleich sind
- analog eines Teil des Dateinames der Zip im vordefinierte Ordner ein Unterordner erstellen und dort entpacken.
- endet der Zip-Name mit com.zip ändert sich der vordefinierte Ordner
Beispiel:
Im Verzeichnis Data liegen z.B 12 Zip-Dateien. Jeweils 4 beginnen mit den gleichen Zeichen
(1101 xyz 650.zip, 1101 xyz 660.zip, 1101 xyz 670.zip, 1101 xyz 670 com.zip)
Nun sollen alle Zip-Dateien die mit 1101 beginnen entpackt werden in die Unterverzeichnisse
\in\raw\xyz 650\, in\raw\xyz 660\, in\raw\xyz 670\, in\com\xyz 670 com\.
Dabei existiert bislang nur das Verzeichnis \in. Die anderen Verzeichnisse wie xyz 650 oder xyz 670 com müßten erstellt werden.
Der Input könnte erstmal entfallen, wichtig wäre daß die ersten passenden Zip-Files entpackt werden.
Im spätern Verlauf, wenn z.B. 1201, 1301, usw. da sind, müßte ich mich um einen Loop über das gesammte Script kümmern. Bis dahin kann man das Programm ja auch neu starten ;-)
Bis jetzt sieht das ganze so aus:
Code:
lw = Left( WScript.ScriptFullName, 2 )
root = lw & "\gmd"
bin = root & "\bin"
cfg = bin & "\cfg"
ext = bin & "\ext"
lg = bin & "\log"
ton = chr(007)
Set WshShell = CreateObject("WScript.Shell")
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
Soviel zur Theorie - leider endets dann auch schon

LG
amn.ssy
Zuletzt bearbeitet: