Packen und entpacken mit Boardmitteln (Batch makecab-expand)
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: Archivierung mittels Batch auf File-Server
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: Archivierung mittels Batch auf File-Server
::Testumgebung
@echo off
:: Handhabung für makecab erzeugen
>"container.ddf" ECHO .Option Explicit
>>"container.ddf" ECHO .Set CabinetNameTemplate=test.cab
>>"container.ddf" ECHO .Set CompressionType=MSZIP
>>"container.ddf" ECHO .Set UniqueFiles="OFF"
>>"container.ddf" ECHO .Set temp-ordner=on
>>"container.ddf" ECHO "test_1.xlsx"
>>"container.ddf" ECHO "test_2.xlsx"
makecab.exe /f container.ddf
:: bereinigen
del setup.inf
del setup.rpt
del container.ddf
move "disk1\*.*" ".\test.cab"
rmdir disk1 disk2 /S/Q
pause
:: Umgekehrter Weg: Cab soll entpackt werden
expand.exe test.cab -F:test_1.xlsx temp-ordner
expand.exe test.cab -F:test_2.xlsx temp-ordner
pause
exit
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 221049
Url: https://administrator.de/contentid/221049
Ausgedruckt am: 19.11.2024 um 17:11 Uhr
23 Kommentare
Neuester Kommentar
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
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
Hallo OKIDOKI,
kann ich nicht nachstellen.
Der Code entspricht, bis auf wenige Korrekturen, deinem.
Die Dateien test_1.xlsx, test_2.xlsx und Verzeichnis temp-ordner existieren. Alles wird korrekt verarbeitet.
Grüße
rubberman
kann ich nicht nachstellen.
Der Code entspricht, bis auf wenige Korrekturen, deinem.
::Testumgebung
@echo off
:: Handhabung für makecab erzeugen
>"container.ddf" ECHO .Option Explicit
>>"container.ddf" ECHO .Set CabinetNameTemplate=test.cab
>>"container.ddf" ECHO .Set CompressionType=MSZIP
>>"container.ddf" ECHO .Set UniqueFiles="OFF"
:: >>"container.ddf" ECHO .Set temp-ordner=on
>>"container.ddf" ECHO "test_1.xlsx"
>>"container.ddf" ECHO "test_2.xlsx"
makecab.exe /f container.ddf
:: bereinigen
del setup.inf
del setup.rpt
del container.ddf
move "disk1\*.*" ".\test.cab"
:: rmdir disk1 disk2 /S/Q
rmdir disk1 /S /Q
pause
:: Umgekehrter Weg: Cab soll entpackt werden
expand.exe test.cab -F:test_1.xlsx temp-ordner
expand.exe test.cab -F:test_2.xlsx temp-ordner
pause
:: exit
Grüße
rubberman
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.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?
action = WScript.Arguments(0)
Select Case LCase(action)
Case "add"
sZipPath = WScript.Arguments(1)
sFolderPath = WScript.Arguments(2)
AddZip sZipPath, sFolderPath
Case "extract"
sZipPath = WScript.Arguments(1)
sFolderPath = WScript.Arguments(2)
ExtractZip sZipPath, sFolderPath
End Select
Sub AddZip (zipFile, sFolder)
With CreateObject("Scripting.FileSystemObject")
zipFile = .GetAbsolutePathName(zipFile)
sFolder = .GetAbsolutePathName(sFolder)
With .CreateTextFile(zipFile, True)
.Write Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, chr(0))
End With
End With
With CreateObject("Shell.Application")
.NameSpace(zipFile).CopyHere .NameSpace(sFolder).Items
Do Until .NameSpace(zipFile).Items.Count = .NameSpace(sFolder).Items.Count
WScript.Sleep 500
Loop
End With
End Sub
Sub ExtractZip (zipFile, sFolder)
With CreateObject("Scripting.FileSystemObject")
zipFile = .GetAbsolutePathName(zipFile)
sFolder = .GetAbsolutePathName(sFolder)
End With
With CreateObject("Shell.Application")
.NameSpace(sFolder).CopyHere .NameSpace(zipFile).Items, 16
Do Until .NameSpace(sFolder).Items.Count = .NameSpace(zipFile).Items.Count
WScript.Sleep 500
Loop
End With
End Sub
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"
Grüße Uwe
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
Grüße Uwe
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
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
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 ...Bei mit passiert leider nichts bisher beim Aufruf der Batch mit der angegebenen Zeile ... ;-(
Grüße Uwe
Hallo OKIDOKI.
Die Doku gibt's natürlich bei Microsoft (msdn.microsoft.com/en-us/library/bb417343.aspx#microsoftmakecabusersguide).
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
Grüße
rubberman
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
Hallo OKIDOKI.
Grüße
rubberman
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.[...]
%CD% - expandiert zum aktuellen Verzeichnisnamen.
[...]
Grüße
rubberman