woho2010
Goto Top

Email-Anhang per batch-Datei in bestimmten Ordner entzippen

Hallo!
Bin ziemlicher newbie bei batch-Programmierung. Ich hoffe, ihr könnt mir helfen. Ich arbeite mit Windows 7 bzw. XP, habe VBA-Kenntnisse für ACCESS.

Ich muss eine gezippte Datei, die ein email-Anhang ist, in einen bestimmten Ordner am PC entzippen. Dies alles soll per Doppelklick auf den email-Anhang (umsatz.hbm = zip-Datei) passieren. Meine Vorstellung ist, dass ich die Batch-Datei z.B. im Windows-Ordner ablege und die Datei-Endung "hbm" mit der Batch-Datei standardmäßig verknüpfe, sodass beim Doppelklicken auf den Anhang der Vorgang ausgelöst wird. Das Entzippen soll möglichst mit Windows-Bordmitteln (expand) passieren.

Habe bereits eine Batch-Datei entwickelt, die mit der aus der email heraus in den Ordner gespeicherten Datei umsatz.hbm funktioniert:

expand *.hbm [Mein Pfad]\umsatz.txt
del *.hbm

Was nicht funktioniert, ist das entzippen als email-Anhang direkt in den Ordner. Hier sollte der Zwischenschritt des Speicherns des Anhanges vermieden werden.

Könnt ihr mir helfen?

Content-ID: 160473

Url: https://administrator.de/forum/email-anhang-per-batch-datei-in-bestimmten-ordner-entzippen-160473.html

Ausgedruckt am: 23.12.2024 um 09:12 Uhr

Skyemugen
Skyemugen 09.02.2011 um 16:57:38 Uhr
Goto Top
Aloha,

expand ... hm wenn ich mich nicht irre, wird es in diesem Fall gar nichts bewirken (für's Extrahieren von .zip-Dateien z.B. ist .vbs die einzige onboard-Lösung, bin ich der Meinung - aber ob das mit .hbm auch klar kommt?).

Noch etwas: Wenn der Anhang als Zwischenschritt im %temp% gespeichert werden würde, was würde deiner Meinung nach dagegensprechen?

greetz Morrow
woho2010
woho2010 09.02.2011 um 17:29:30 Uhr
Goto Top
Danke für deine Antwort. Zu deiner Info: der Anhang hbm ist keine Endung im eigentlichen Sinn, es ist eigentlich eine zip-Datei. Hbm wurde nur willkürlich als Endung gewählt. Wie funktioniert vbs?
Nein, es würde auch nichts dagegen sprechen, im Temp-Verzeichnis zwischenzuspeichern - aaaber . . .wie geht das :D
bastla
bastla 09.02.2011 um 20:31:58 Uhr
Goto Top
Hallo woho2010 und willkommen im Forum, hallo Skyemugen!

Nur per Drag & Drop getestet:
@echo off & setlocal
set "ZIP=%temp%\%~n1.zip"  
copy %1 "%ZIP%">nul  
set U=%temp%\Unzip.vbs
>%U% echo Set App=CreateObject("Shell.Application"):Set a=WScript.Arguments:App.Namespace("%~dp1").CopyHere App.Namespace("%ZIP%").Items  
cscript //nologo %U%
del "%ZIP%"  
Grüße
bastla
Skyemugen
Skyemugen 09.02.2011 um 22:26:38 Uhr
Goto Top
Aloha bastla!

WIe ich sehe, haste den code von letztens und so ;) ja bereits c&p, hab derzeit andere Dinge am Hut und komme irgendwie zu gar nichts mehr außer mal eben very fix 'nen Satz zu verfassen ^.^

greetz André

edit: lol falsche Grußformel, haha falsches Forum ^.^
bastla
bastla 09.02.2011 um 22:32:40 Uhr
Goto Top
Hallo Skyemugen!
den code von letztens und so ;) ja bereits c&p
Nicht ganz - ist noch etwas komprimierter (was ja zum Thema passt face-wink) ...

Grüße
bastla
Skyemugen
Skyemugen 09.02.2011 um 22:57:32 Uhr
Goto Top
Aloha again ^.^

ja das sah ich auch :P aber es gibt halt kein c&p&d, hehe.

greetz André
woho2010
woho2010 10.02.2011 um 09:20:51 Uhr
Goto Top
Danke für die schnelle Antwort.

Habe nun eine "Unzip.vbs" im Temp-Ordner.

Wie geht es weiter? Die Datei soll nun in die Datei "Umsatz.txt" in den Pfad "D:\Access\Datenbank\" entzippt werden. Habe den Verdacht, dass dies mit den Zeilen ">%U% echo Set App=CreateObject("Shell.Application"):Set a=WScript.Arguments:App.Namespace("%~dp1").CopyHere App.Namespace("%ZIP%").Items" und "cscript //nologo %U% " zu tun hat. Stimmt's? Bitte helft mir Unbedarften noch einmal! Was bedeuten diese Zeilen?

Lg Wolfgang
Skyemugen
Skyemugen 10.02.2011 um 10:06:54 Uhr
Goto Top
Aloha,

>%U% echo Set App=CreateObject("Shell.Application"):Set a=WScript.Arguments:App.Namespace("%~dp1").CopyHere App.Namespace("%ZIP%").Items 
Hiermit wird per echo-Befehl der eigentliche Inhalt zum Entzippen in die Unzip.vbs geschrieben (ohne ihn, wäre das Skript sonst leer)
%~dp1 erweitert %1 (normaler Parameter) zu einem Laufwerksbuchstaben und Pfad
%~n1 (im %ZIP% hinterlegt) extrahiert den Dateinamen von %1 ohne Erweiterung
csrcipt //nologo %U% macht nichts anderes als die Unzip.vbs auszuführen, ohne dabei das übliche Logo einzublenden

Das Skript ist momentan für drag&drop der zu entpackenden Datei ausgelegt und du willst jetzt, dass direkt deine Datei aus dem Anhang noch beim Öffnen sozusagen aus dem email-Programm mit dem Skript nach einem vordefiniertem Verzeichnis entpackt wird, sehe ich das richtig?

greetz André
bastla
bastla 10.02.2011 um 10:40:43 Uhr
Goto Top
Hallo woho2010!

Ich hatte die Anforderung so interpretiert, dass der Ordner, in welchem die ".hbm"-Datei liegt, auch als Ziel für das Entpacken verwendet werden sollte. Wenn das Ziel per absolutem Pfad vorgegeben werden soll, wäre die Zeile 5 auf
>%U% echo Set App=CreateObject("Shell.Application"):Set a=WScript.Arguments:App.Namespace("D:\Access\Datenbank\").CopyHere App.Namespace("%ZIP%").Items
zu ändern.
Habe nun eine "Unzip.vbs" im Temp-Ordner.
Das lässt sich ändern, indem Du am Ende des Batches noch ein
del %U%
ergänzt. face-wink
Was bedeuten diese Zeilen?
Damit wird ein (temporäres) VBScript erstellt, das gezielt für die übergebene Datei das Entpacken unter Verwendung der Windows-eigenen ZIP-Verarbeitung durchführt ...

Grüße
bastla
woho2010
woho2010 10.02.2011 um 10:44:15 Uhr
Goto Top
Yepp! Langsam wird mir manches klarer! Hast du hier den richtigen Code für mich?
woho2010
woho2010 10.02.2011 um 10:54:52 Uhr
Goto Top
Danke auch für deine Hinweise!

Wie bereits bei André oben beschrieben, soll die Datei direkt aus dem email-Anhang in den Ordner entzippt werden.

Lg Wolfgang
bastla
bastla 10.02.2011 um 11:09:29 Uhr
Goto Top
Hallo woho!
Meine Vorstellung ist, dass ich die Batch-Datei z.B. im Windows-Ordner ablege und die Datei-Endung "hbm" mit der Batch-Datei standardmäßig verknüpfe
Die Batch-Datei solltest Du (falls sie auch bei Dir funktioniert) ja damit bereits haben, und wenn Du sie (mittels Datentyp-Verknüpfung) mit Übergabe des Pfades nach dem Muster
"%windir%\Unzip_hbm.cmd" %1
startest, sollte das klappen ...

Grüße
bastla
woho2010
woho2010 10.02.2011 um 11:54:18 Uhr
Goto Top
Hallo Bastla!

Habe die Batch-Datei über Windows "Öffnen mit" verknüpft, sie wird auch ausgeführt, habe auch lt. der Empfehlung von André den Pfad wie folgt in die Programmzeile eingefügt: ">%U% echo Set App=CreateObject("Shell.Application"):Set a=WScript.Arguments:App.Namespace("D:\Access\Datenbank\").CopyHere App.Namespace("%ZIP%").Items"; nur erscheint derzeit noch keine "Umsatz.txt" Datei im Ordner "D:\Access\Datenbank". face-sad

Lg

Wolfgang
bastla
bastla 10.02.2011 um 12:14:24 Uhr
Goto Top
Hallo woho2010!
Habe die Batch-Datei über Windows "Öffnen mit" verknüpft
... und ihr auch den Parameter %1 übergeben?
Zum Testen könntest du das "echo off" in ein "echo on" ändern und als neue letzte Zeile
pause
hinzufügen ...

Grüße
bastla
woho2010
woho2010 10.02.2011 um 14:33:43 Uhr
Goto Top
Lieber bastla!

Komme noch nicht klar. Wie kann ich der Batch-Datei die parameter übergeben? Übrigens heißt die Batch-Datei bei mir "extract.bat" und steht im Windows-Verzeichnis.

Habe nun folgenden Code in dieser Datei:

@echo off & setlocal


set "ZIP=%temp%\%~n1.zip"

copy %1 "%ZIP%">nul

set U=%temp%\Unzip.vbs

%U% echo Set App=CreateObject("Shell.Application"):Set a=WScript.Arguments:App.Namespace("D:\Acc_anw\SONSTIGE\umsatz.txt").CopyHere App.Namespace("%ZIP%").Items

cscript //nologo %U%

del "%ZIP%"
del %U%

Ich bekomme folgende Fehlermeldung:

Fehler in Microsoft VB-Script. Objekt erforderlich in App.namespace(...)

Anscheinend liegts am fehlenden Objekt. Grrr.

Irgendeine Idee?

Lg Wolfgang

P.S. Habe bemerkt, dass bei Erstellen der "Umsatz.zip"-Datei ein Fehler vorhanden ist. Fehlermeldung, wenn ich die Umsatz.zip im Ordner "temp" öffnen möchte: "Fehler in gepackter Datei c:\temp\umsatz.zip!"
Zip-Datei ist anscheinend nicht lesbar.
bastla
bastla 10.02.2011 um 15:04:08 Uhr
Goto Top
Hallo woho2010!
Wie kann ich der Batch-Datei die parameter übergeben? Übrigens heißt die Batch-Datei bei mir "extract.bat"
So, wie ich das oben am Beispiel der "Unzip_hbm.cmd" dargestellt habe (es ist übrigens keine gute Idee, Batch-Dateien wie CMD-Befehle zu benennen) ...
Fehler in Microsoft VB-Script. Objekt erforderlich in App.namespace(...)
Auf jeden Fall nur den Pfad zum Zielordner - also "D:\Acc_anw\SONSTIGE\" - angeben ...

Grüße
bastla
woho2010
woho2010 10.02.2011 um 15:36:57 Uhr
Goto Top
So, wie ich das oben am Beispiel der "Unzip_hbm.cmd" dargestellt habe (es ist übrigens keine gute Idee,
Batch-Dateien wie CMD-Befehle zu benennen) ...

Das verstehe ich nicht, wie bzw. wo soll ich diese Parameterdefinition einbauen? Bedeutet das, dass ich die extract.bat-Datei umbenennen soll in z.B. "unzip_hbm.cmd"?

> Fehler in Microsoft VB-Script. Objekt erforderlich in App.namespace(...)
Auf jeden Fall nur den Pfad zum Zielordner - also "D:\Acc_anw\SONSTIGE\" - angeben ...

Habe den Fehler schon bemerkt und "umsatz.txt" gelöscht, Fehlermeldung bleibt. ?Was tun????

Tschuldige, dass ich so lästig bin!

Lg Wolfgang
bastla
bastla 10.02.2011 um 20:05:59 Uhr
Goto Top
Hallo woho2010!
Das verstehe ich nicht, wie bzw. wo soll ich diese Parameterdefinition einbauen?

Habe die Batch-Datei über Windows "Öffnen mit" verknüpft
Wo hast Du denn da die Batchdatei "eingebaut"? face-wink

Um das etwas abzukürzen: Der Verweis auf die Batchdatei ist für den Dateityp "hbm" unter "open" eingetragen (zB in XP unter "Extras / Ordneroptionen... / Dateitypen / hbm / Erweitert / open / Bearbeiten... / Anwendung für diesen Vorgang") - dort kannst Du auch am Ende noch (nach einem Leerzeichen) %1 hinzufügen ...

Grüße
bastla
woho2010
woho2010 11.02.2011 um 08:47:04 Uhr
Goto Top
Hi Bastla

habe endlich meinen Fehler gefunden, der Code hat funktioniert: Ich hatte aus welchem Grund auch immer die zu entpackende Textdatei nicht gezippt, nur mit neuem Suffix "hbm" versehen, deswegen gab es den Fehler in der Zip-Datei beim Entpacken. Alles wunderbar, ihr seid Spitze!

Gottes Segen für euch und eure Familie

Wolfgang