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

Packen und entpacken mit Boardmitteln (Batch makecab-expand)

Frage Microsoft Windows Tools

Mitglied: OKIDOKI

OKIDOKI (Level 1) - Jetzt verbinden

03.11.2013, aktualisiert 16:47 Uhr, 3801 Aufrufe, 23 Kommentare

Bin völlig ratlos und frustriert ...
Ich möchte gerne zwei Dateien packen und später wieder entpacken mit Windows Boardmitteln, da es auf verschiedenen Systemen laufen soll - keine Thirdparty!

Mein Ansatz funktioiniert zumindest beim Packen (so scheint es mir), allerdings entsteht beim Entpacken bei einer Datei von beiden nur Datenmüll, die zweite hingegen wird korrekt expandiert. Das kommt mir komisch und ich weiß nicht weiter. Vielleicht gibt es auch eine andere Möglichkeit des Packens und Entpackens - über Hilfe würde ich mich freuen!
PS: Meine Frage beruht auf diesem Beitrag: http://www.administrator.de/frage/archivierung-mittels-batch-auf-file-s ...

01.
::Testumgebung 
02.
@echo off 
03.
:: Handhabung für makecab erzeugen 
04.
  >"container.ddf" ECHO .Option Explicit 
05.
 >>"container.ddf" ECHO .Set CabinetNameTemplate=test.cab 
06.
 >>"container.ddf" ECHO .Set CompressionType=MSZIP 
07.
 >>"container.ddf" ECHO .Set UniqueFiles="OFF" 
08.
 >>"container.ddf" ECHO .Set temp-ordner=on 
09.
 >>"container.ddf" ECHO  "test_1.xlsx" 
10.
 >>"container.ddf" ECHO  "test_2.xlsx" 
11.
 
12.
makecab.exe /f container.ddf 
13.
:: bereinigen 
14.
del setup.inf  
15.
del setup.rpt 
16.
del container.ddf 
17.
 
18.
move "disk1\*.*" ".\test.cab" 
19.
rmdir disk1 disk2 /S/Q  
20.
 
21.
pause 
22.
 
23.
:: Umgekehrter Weg: Cab soll entpackt werden 
24.
expand.exe test.cab -F:test_1.xlsx temp-ordner 
25.
expand.exe test.cab -F:test_2.xlsx temp-ordner 
26.
 
27.
pause 
28.
exit
Mitglied: colinardo
03.11.2013 um 16:59 Uhr
Hallo OKIDOKI,
wenn dir Powershell nichts ausmacht :
http://www.admin-source.de/BlogDeu/450/powershell-zip-ohne-module-oder- ...
Lässt sich alternativ auch im selben Schema mit VB-Script umsetzen ...

Grüße Uwe
Bitte warten ..
Mitglied: rubberman
03.11.2013 um 17:28 Uhr
Hallo OKIDOKI,

wo hast du denn das
>>"container.ddf" ECHO .Set temp-ordner=on
hergenommen?
Wenn du diese Zeile auskommentierst und ein Verzeichnis temp-ordner im Arbeitsverzeichnis existiert, sehe ich keinen Grund, warum es nicht funktionieren sollte.

Grüße
rubberman
Bitte warten ..
Mitglied: OKIDOKI
03.11.2013, aktualisiert um 18:36 Uhr
Hallo rubbermann,

es wäre so schön, wenn es funktionieren würde, aber leider kommt dann die Meldung: "test.cab: Für eine CAB-Datei, die mehrere Dateien enthält, ist ein Zielverzeichnis erforderlich."

PS colinardo: Die zip-Variante hört sich gut an. Mein Problem ist aber, von VBS habe ich gar keine Ahnung. Jetzt stellt sich nämlich die Frage, wie ist es möglich die vbs im selben Verzeichnis auszuführen, wo auch die Dateien liegen. Dann wäre es ein relativer Pfad, der lässt sich so leider nicht angeben. Hast du dazu vielleicht eine Idee?

Dankeschön
Bitte warten ..
Mitglied: rubberman
03.11.2013 um 18:38 Uhr
Hallo OKIDOKI.

"test.cab: Für eine CAB-Datei, die mehrere Dateien enthält, ist ein Zielverzeichnis erforderlich."
Dann hast du eben kein Verzeichnis namens temp-ordner im Arbeitsverzeichnis, sonst gäbe es diese Meldung nicht.

Grüße
rubberman
Bitte warten ..
Mitglied: OKIDOKI
03.11.2013 um 18:44 Uhr
Hallo rubbermann,

zunächst noch einmal zum Verzeichnis, da hast du recht. Allerdings, es klingt paradox. Die erste Datei wird wunderbar extrahiert, bei der zweiten hängt er sich auf...
Also, wie gehabt.

OKIDOKI
Bitte warten ..
Mitglied: rubberman
03.11.2013 um 18:54 Uhr
Hallo OKIDOKI,

kann ich nicht nachstellen.
Der Code entspricht, bis auf wenige Korrekturen, deinem.
01.
::Testumgebung 
02.
@echo off 
03.
:: Handhabung für makecab erzeugen 
04.
  >"container.ddf" ECHO .Option Explicit 
05.
 >>"container.ddf" ECHO .Set CabinetNameTemplate=test.cab 
06.
 >>"container.ddf" ECHO .Set CompressionType=MSZIP 
07.
 >>"container.ddf" ECHO .Set UniqueFiles="OFF" 
08.
:: >>"container.ddf" ECHO .Set temp-ordner=on 
09.
 >>"container.ddf" ECHO  "test_1.xlsx" 
10.
 >>"container.ddf" ECHO  "test_2.xlsx" 
11.
 
12.
makecab.exe /f container.ddf 
13.
:: bereinigen 
14.
del setup.inf  
15.
del setup.rpt 
16.
del container.ddf 
17.
 
18.
move "disk1\*.*" ".\test.cab" 
19.
:: rmdir disk1 disk2 /S/Q 
20.
rmdir disk1 /S /Q  
21.
 
22.
pause 
23.
 
24.
:: Umgekehrter Weg: Cab soll entpackt werden 
25.
expand.exe test.cab -F:test_1.xlsx temp-ordner 
26.
expand.exe test.cab -F:test_2.xlsx temp-ordner 
27.
 
28.
pause 
29.
:: exit
Die Dateien test_1.xlsx, test_2.xlsx und Verzeichnis temp-ordner existieren. Alles wird korrekt verarbeitet.

Grüße
rubberman
Bitte warten ..
Mitglied: OKIDOKI
03.11.2013 um 19:57 Uhr
Hallo rubbermann,

du hast einerseits recht, dass es funktioniert - mit leeren Excel-Files. Meine sind je 1,9MB groß, da funktioniert es bei der zweiten einfach nicht mehr, sie wird nur zur Hälfte entpackt, dann bricht er ab - kannst du dir das erklären?

Gruß
OKIDOKI
Bitte warten ..
Mitglied: rubberman
03.11.2013 um 20:48 Uhr
Hallo OKIDOKI.

kannst du dir das erklären?
Jepp, kann ich. MAKECAB splitted die Daten in CAB Dateien zu 1,44 MB, wenn nicht anders angegeben. Nun lass mich mal fix die Doku lesen, da steht drin, was dagegen zu tun ist.
.Set MaxDiskSize=0 wenn ich nicht irre...

Grüße
rubberman
Bitte warten ..
Mitglied: colinardo
03.11.2013, aktualisiert 04.11.2013
Zitat von OKIDOKI:
PS colinardo: Die zip-Variante hört sich gut an. Mein Problem ist aber, von VBS habe ich gar keine Ahnung. Jetzt stellt sich
nämlich die Frage, wie ist es möglich die vbs im selben Verzeichnis auszuführen, wo auch die Dateien liegen. Dann
wäre es ein relativer Pfad, der lässt sich so leider nicht angeben. Hast du dazu vielleicht eine Idee?
Kein Problem, habe dir mal folgendes Script gebaut mit dem du den Inhalt eines Ordners in ein Zip packen, und auch wieder extrahieren kannst.
01.
action = WScript.Arguments(0)	 
02.
 
03.
Select Case LCase(action) 
04.
	Case "add" 
05.
		sZipPath = WScript.Arguments(1) 
06.
		sFolderPath = WScript.Arguments(2) 
07.
		AddZip sZipPath, sFolderPath 
08.
	Case "extract" 
09.
		sZipPath = WScript.Arguments(1) 
10.
		sFolderPath = WScript.Arguments(2) 
11.
		ExtractZip sZipPath, sFolderPath 
12.
End Select 
13.
 
14.
Sub AddZip (zipFile, sFolder) 
15.
    With CreateObject("Scripting.FileSystemObject") 
16.
        zipFile = .GetAbsolutePathName(zipFile) 
17.
        sFolder = .GetAbsolutePathName(sFolder) 
18.
        With .CreateTextFile(zipFile, True) 
19.
            .Write Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, chr(0)) 
20.
        End With 
21.
    End With 
22.
 
23.
    With CreateObject("Shell.Application") 
24.
        .NameSpace(zipFile).CopyHere .NameSpace(sFolder).Items 
25.
        Do Until .NameSpace(zipFile).Items.Count = .NameSpace(sFolder).Items.Count 
26.
            WScript.Sleep 500  
27.
        Loop 
28.
    End With 
29.
End Sub 
30.
 
31.
Sub ExtractZip (zipFile, sFolder) 
32.
    With CreateObject("Scripting.FileSystemObject") 
33.
        zipFile = .GetAbsolutePathName(zipFile) 
34.
        sFolder = .GetAbsolutePathName(sFolder) 
35.
    End With 
36.
 
37.
    With CreateObject("Shell.Application") 
38.
        .NameSpace(sFolder).CopyHere .NameSpace(zipFile).Items, 16 
39.
        Do Until .NameSpace(sFolder).Items.Count = .NameSpace(zipFile).Items.Count 
40.
            WScript.Sleep 500 
41.
        Loop 
42.
    End With 
43.
End Sub
Du speicherst es dir z.B.als zip.vbs, und dann führst du folgende Zeilen in der Batch aus um den Inhalt eines Ordners zu komprimieren bzw. zu extrahieren:
Beispiel: Inhalt eines Ordners komprimieren
cscript //B //NOLOGO zip.vbs add "C:\test.zip" "C:\source"
Beispiel: Inhalt eines ZipFiles extrahieren
cscript //B //NOLOGO zip.vbs extract "C:\test.zip" "C:\target"
Hinweis: Du kannst auch relative Pfade angeben wie ".\source" angeben.

Grüße Uwe
Bitte warten ..
Mitglied: OKIDOKI
03.11.2013 um 21:01 Uhr
Hallo rubbermann,
super, hat geklappt!!!

Eine Frage noch: Ein Passwort ist wohl nicht möglich...

Ansonsten ist der Thread geklärt,

vielen Dank rubbermann
OKIDOKI
Bitte warten ..
Mitglied: OKIDOKI
03.11.2013, aktualisiert um 21:05 Uhr
Hallo colinardo,

das ist ja noch mal genauso super und ich werde es morgen gleich ausprobieren! (Insgesamt bin ich froh beide Varianten geklärt zu haben, im Netz werden sie nämlich heiß diskutiert und hier gibt es beide Lösungen!!!)

Eine Frage auch hierzu, colinardo: Ist hier ein Passwort möglich?

Vielen, vielen Dank,
Rückmeldung morgen!

OKIDOKI
Bitte warten ..
Mitglied: rubberman
03.11.2013 um 21:27 Uhr
Hallo OKIDOKI.

Ein Passwort ist wohl nicht möglich...
Nicht dass mir was bekannt wäre. In der Doku findet sich auch nichts dazu.

Grüße
rubberman
Bitte warten ..
Mitglied: OKIDOKI
03.11.2013 um 21:31 Uhr
Hallo rubbermann,

das hatte ich mir schon gedacht, hatte auch nichts gefunden bisher

Ein RIESENDANKESCHÖN im weltbesten Forum,

OKIDOKI
Bitte warten ..
Mitglied: colinardo
03.11.2013, aktualisiert um 21:34 Uhr
Zitat von OKIDOKI:
Eine Frage auch hierzu, colinardo: Ist hier ein Passwort möglich?
IMHO glaube ich nicht. Dazu müsste man mit VBS das ZIP-Format nachbauen... das wäre mal ne Aufgabe für lange Winterabende

Grüße Uwe
Bitte warten ..
Mitglied: Bitboy
04.11.2013 um 10:46 Uhr
HI,

auch wenns inzwischen mit zip gelöst wurde wollte ich noch die Angaben für eine CAB Datei posten, die zumindest bei mir problemlos funktionieren:

.OPTION EXPLICIT
.Set CompressionType=MSZIP
.Set UniqueFiles="OFF"
.Set Compress=on
.Set Cabinet=on
.Set CabinetFileCountThreshold=0
.Set FolderFileCountThreshold=0
.Set FolderSizeThreshold=0
.Set MaxCabinetSize=0
.Set MaxDiskFileCount=0
.Set MaxDiskSize=0
.Set DiskDirectoryTemplate=%AusgabeOrdnerDerCabDatei%
.Set CabinetNameTemplate=%DateiName%.cab
%Datei1%
%Datei2%
usw
Bitte warten ..
Mitglied: OKIDOKI
04.11.2013 um 20:56 Uhr
Hi Bitboy,

vielen Dank für deine Mühe! Ich hätte noch die Bitte, kurz die Befehle zu kommentieren. Gerade auch die Angabe des Ausgabeordners wäre mir wichtig. Hier benötige ich einen relativen Pfad. Ist es dasselbe wie oben ".Set temp-ordner=on"?

OKIDOKI
Bitte warten ..
Mitglied: OKIDOKI
04.11.2013 um 21:13 Uhr
Hallo Uwe,

soweit erst einmal vielen Dank. Vielleicht bin ich zu ungeduldig, wie genau sieht die batch-Zeile aus? Was hat es denn mit "cscript.vbs" auf sich?

Bei mit passiert leider nichts bisher beim Aufruf der Batch mit der angegebenen Zeile ... ;-(

OKIDOKI
Bitte warten ..
Mitglied: colinardo
04.11.2013 um 21:17 Uhr
Zitat von OKIDOKI:
Bei mit passiert leider nichts bisher beim Aufruf der Batch mit der angegebenen Zeile ... ;-(
Sorry mein Fehler, hab mich vertippt... habs oben korrigiert ...
Grüße Uwe
Bitte warten ..
Mitglied: OKIDOKI
04.11.2013 um 22:05 Uhr
Hallo Uwe,

tadellos - echt prima!

Für alle Code-Picker: Hier findet ihr die ultimativen Lösungen für das o.g. Problem - kein Forum, was ich fand, bot solche umfassenden und zielführenden Lösungen.

Vielen Dank noch einmal,
OKIDOKI

PS: Wer daran noch weiter arbeiten möchte, dem sei die Passwortsuche für lange Winterabende empfohlen (s.o.).
Bitte warten ..
Mitglied: rubberman
04.11.2013, aktualisiert um 22:10 Uhr
Hallo OKIDOKI.

Die Doku gibt's natürlich bei Microsoft (msdn.microsoft.com/en-us/library/bb417343.aspx#microsoftmakecabusersguide).

Ist es dasselbe wie oben ".Set temp-ordner=on"?
Wo hast du nur diese Zeile gefunden? Funktioniert sowas wirklich bei dir?

Ob du nun relative oder absolute Pfadangaben nutzt, kannst du dir aussuchen. Aus einem relativen Pfad ließe sich auch ruckzuck ein absoluter machen. In Variable %cd% findest du das derzeitige Arbeitsverzeichnis (ohne nachgestellten Backslash), während %~dp0 zum Verzeichnis aufgelöst wird, in dem die Batchdatei liegt (mit nachgestelltem Backslash).

Grüße
rubberman
Bitte warten ..
Mitglied: OKIDOKI
05.11.2013 um 16:58 Uhr
Hallo rubbermann,

ich habe noch einmal meine Recherchen nachvollzogen und kann es ehrlich gesagt gar nicht mehr sagen ... komisch ;-|

Mit der Doku bin ich dir deshalb sehr dankbar, irgendwie ist alles da, wenn man weiß wo!

Wo hast du denn jetzt die Variable %cd% her? Ich würde das gerne nachstellen.

Grüße
OKIDOKI
Bitte warten ..
Mitglied: rubberman
05.11.2013 um 18:06 Uhr
Hallo OKIDOKI.

Wo hast du denn jetzt die Variable %cd% her?
Aus der Hilfe zum SET Befehl. Wie du schon sagtest:
irgendwie ist alles da, wenn man weiß wo!

SET /?
[...]
%CD% - expandiert zum aktuellen Verzeichnisnamen.
[...]
Es ist eine dynamische Variable, die automatisch vom Kommandozeileninterpreter gesetzt wird.

Grüße
rubberman
Bitte warten ..
Mitglied: OKIDOKI
06.11.2013 um 14:39 Uhr
Hallo rubbermann,

vieln Dank für deine Hinweise!

Gruß
OKIDOKI
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Per Batch Winrar entpacken - Probleme bei Pfad (7)

Frage von Concurve zum Thema Batch & Shell ...

Batch & Shell
Batch zum bearbeiten mehrerer CSV (3)

Frage von Matzus87 zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...

Windows Tools
gelöst Aussendienst Datensynchronisierung (12)

Frage von lighningcrow zum Thema Windows Tools ...

Windows Server
Suche passender Treiber (12)

Frage von stolli zum Thema Windows Server ...