Lösung gesucht: aus epub METADATA title leeren. eBookReader soll dadurch nach Dateinamen sortieren bzw. diese anzeigen
Hallo alle zusammen,
ich suche eine "Lösung" um alle in einem Ordner befindliche "epubs" in einem Rutsch die <metadata> "title" zu leeren.
Hintergrund:
Meine Frau und ich lesen viel auf eBook-Readern. Bevorzugtes Format ist "epub". Diese XML basierende Datei können wie MP3s getagt sein, wie title, creator, date.... Leider werden diese Metadaten bei eBookReadern zum Anzeigen und Sortieren als erstes verwendet - der Dateiname wird hierbei (leider) komplett ignoriert! Diese Metadaten müssen gepflegt sein, damit die epubs auch sauber auf dem eBookReader angezeigt werden, das ist im Einzelfall mit calibre, EPubMetadataEditor oder tweak_epub möglich. Bei mehreren epubs aber sehr zeitraubend.
Trick:
Jetzt gibt es einen Trick um diese Geschichte mit der Pflege der Metadaten zu umgehen. Wenn im <metadata> "title" nichts steht also leer ist <dc:title></dc:title>, genau dann zeigt der eBookReader die Dateiname an und sortiert entsprechend den Dateinamen.
Die METADATA "Title" befindet sich immer in der content.opf.
epub Aufbau:
Wenn man die Dateiendung "epub" in "zip" umbenennt, kann man sie öffnen:
Das sieht z.B. so aus:
Oder z.B. so:
Oder z.B.auch so:
Die METADATA "Title" befindet sich immer in der content.opf
Der Datei-Ausschnitt sieht so z.B. aus:
Jetzt muß in diesem Beispiel die 2. Zeile ausgetauscht werden!
durch
Es wäre schön, wenn mir jemand eine funktionierende Lösung Batch/ PowerShell anbieten könnte, damit man das Leeren des Feld "Title" bei jeder "epub", die sich alle im gleichen Ordner befinden, automatisieren kann.
Danke im Voraus
Viele Grüße
Andy
ich suche eine "Lösung" um alle in einem Ordner befindliche "epubs" in einem Rutsch die <metadata> "title" zu leeren.
Hintergrund:
Meine Frau und ich lesen viel auf eBook-Readern. Bevorzugtes Format ist "epub". Diese XML basierende Datei können wie MP3s getagt sein, wie title, creator, date.... Leider werden diese Metadaten bei eBookReadern zum Anzeigen und Sortieren als erstes verwendet - der Dateiname wird hierbei (leider) komplett ignoriert! Diese Metadaten müssen gepflegt sein, damit die epubs auch sauber auf dem eBookReader angezeigt werden, das ist im Einzelfall mit calibre, EPubMetadataEditor oder tweak_epub möglich. Bei mehreren epubs aber sehr zeitraubend.
Trick:
Jetzt gibt es einen Trick um diese Geschichte mit der Pflege der Metadaten zu umgehen. Wenn im <metadata> "title" nichts steht also leer ist <dc:title></dc:title>, genau dann zeigt der eBookReader die Dateiname an und sortiert entsprechend den Dateinamen.
Die METADATA "Title" befindet sich immer in der content.opf.
epub Aufbau:
Wenn man die Dateiendung "epub" in "zip" umbenennt, kann man sie öffnen:
Das sieht z.B. so aus:
21.04.2016 22:51 <DIR> META-INF
21.04.2016 22:51 <DIR> text
21.04.2016 21:54 4.756 content.opf
21.04.2016 21:54 74.610 cover.jpeg
21.04.2016 21:54 20 mimetype
21.04.2016 21:54 58 page_styles.css
21.04.2016 21:54 2.636 stylesheet.css
21.04.2016 21:54 799 titlepage.xhtml
21.04.2016 21:54 4.104 toc.ncx
Oder z.B. so:
21.04.2016 23:27 <DIR> META-INF
21.04.2016 23:27 <DIR> Ops // <- content.opf ist hier drin
11.12.2015 01:49 20 mimetype
Oder z.B.auch so:
22.04.2016 14:05 <DIR> META-INF
22.04.2016 14:05 <DIR> OEBPS // <- content.opf ist hier drin
24.07.2015 11:49 20 mimetype
Die METADATA "Title" befindet sich immer in der content.opf
Der Datei-Ausschnitt sieht so z.B. aus:
.
.
.
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
<dc:title>H. P. Lovecraft - der Poet des Grauens</dc:title>
<dc:creator opf:file-as="Alpers, Hans Joachim" opf:role="aut">Hans Joachim Alpers </dc:creator>
<dc:publisher>CORIAN-Verlag</dc:publisher>
<dc:date>2015-12-11</dc:date>
<dc:identifier id="BookId">AWP-6C36EAE6-03A1-4247-9D0E-35EC317BDA1C</dc:identifier>
<dc:language>de</dc:language>
<meta name="cover" content="cover"/>
</metadata>
.
.
.
Jetzt muß in diesem Beispiel die 2. Zeile ausgetauscht werden!
<dc:title>H. P. Lovecraft - der Poet des Grauens</dc:title>
durch
<dc:title></dc:title>
Es wäre schön, wenn mir jemand eine funktionierende Lösung Batch/ PowerShell anbieten könnte, damit man das Leeren des Feld "Title" bei jeder "epub", die sich alle im gleichen Ordner befinden, automatisieren kann.
Danke im Voraus
Viele Grüße
Andy
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 302669
Url: https://administrator.de/contentid/302669
Ausgedruckt am: 24.11.2024 um 23:11 Uhr
21 Kommentare
Neuester Kommentar
Hallo Andy.
Um zum Ziel zu kommen, brauchst du ein Tool, dass mit ZIP umgehen kann. Ich nutze im folgenden 7-Zip, das du ggf. installieren müsstest.
Speichere folgendes Script mit der Endung .bat
Den Pfad zur 7z.exe und den Pfad zu deinen ePUB Dateien (Zeilen 4, 5) musst du entsprechend anpassen.
Versteht sich, dass du vorher ein Backup der Dateien machen solltest. Ich habe bislang lediglich mit einer Datei getestet ...
Grüße
rubberman
/EDIT: Link zur letzten Version des Scripts
Die METADATA "Title" befindet sich immer in der content.opf
Nee, in der .opf Datei, deren Pfad sich in der META-INF\container.xml finden lässt. Der Name kann und wird ggf. abweichen. Ist aber nicht weiter schlimm, da es nur jeweils eine Datei mit Endung .opf geben sollte ...Jetzt muß in diesem Beispiel die 2. Zeile ausgetauscht werden!
XML bearbeitet man gemäß dem Document Object Model. Sich auf irgendeine Zeilensortierung zu verlassen, geht in die Hose.Um zum Ziel zu kommen, brauchst du ein Tool, dass mit ZIP umgehen kann. Ich nutze im folgenden 7-Zip, das du ggf. installieren müsstest.
Speichere folgendes Script mit der Endung .bat
@if (@x)==(@y) @end /*
@echo off &setlocal
set "p7z=%ProgramFiles%\7-Zip\7z.exe"
set "epubdir=D:\eBooks"
set "flag="
for /f "delims=" %%h in ('dir /a-d /b /s "%epubdir%\*.epub"') do (
for /f "tokens=3,5*" %%i in ('call "%p7z%" l "%%~h"^|findstr /ie "\.opf"') do if "%%i" lss "D" (
>nul call "%p7z%" x "%%~h" "%%k"
cscript //nologo //e:jscript "%~fs0" "%%k"
>nul call "%p7z%" u "%%~h" "%%k"
if "%%k"=="%%~nxk" (del "%%k") else (
set "p=%%k"
setlocal EnableDelayedExpansion
for %%l in ("!p:\=" "!") do if not defined flag (set "flag=1" &rd /s /q %%l)
endlocal
)
)
)
pause
exit /b
*/
var oXmlDoc = new ActiveXObject('Microsoft.XMLDOM');
oXmlDoc.async = false;
oXmlDoc.load(WScript.Arguments(0));
var oErr = oXmlDoc.parseError;
if (oErr.errorCode == 0) {
var oNode = oXmlDoc.documentElement.selectSingleNode('//metadata/dc:title');
if (null != oNode) {
oNode.text = '';
oXmlDoc.save(WScript.Arguments(0));
}
}
Versteht sich, dass du vorher ein Backup der Dateien machen solltest. Ich habe bislang lediglich mit einer Datei getestet ...
Grüße
rubberman
/EDIT: Link zur letzten Version des Scripts
Hallo Andy,
und wenn du es mit Powershell ohne Zusatztools machen willst kannst du das hier nehmen:
(min. PS 3.0, Kommentare sind für jede Codezeile vorhanden)
Grüße Uwe
und wenn du es mit Powershell ohne Zusatztools machen willst kannst du das hier nehmen:
(min. PS 3.0, Kommentare sind für jede Codezeile vorhanden)
<#
Löscht den Title aus der content.opf jeder epub Datei eines Ordners (inkl. Unterordner)
#>
# ===== Variablen anpassen =======
# Pfad zu den Dateien
$pathFiles = 'A:\ebooks'
# ================================
# Benötigt wird mindestens NET-Framework 4.5 und Powershell 3.0
if ($PSVersionTable.PSVersion.Major -lt 3){write-host "ERROR: Minimum Powershell Version 3.0 is required!" -F Yellow; return}
# benötigte Assemblies laden
Add-Type -AssemblyName System.IO.Compression
Add-Type -AssemblyName System.IO.Compression.Filesystem
# Verarbeite alle eBooks im Ordner
gci $pathFiles -Filter '*.epub' -Recurse -File | %{
# ePub als ZIP-Datei im Update-Modus öffnen
$zipfile = [System.IO.Compression.ZipFile]::Open($_.FullName,[System.IO.Compression.ZipArchiveMode]::Update)
# Temporäre Extrahierungs-Pfade für die Datei die geändert wird
$contentfile = "$env:TEMP\content.opf"
# Falls die temoporäre Datei existiert lösche sie
if((Test-Path $contentfile)){del $contentfile -Force}
# Einträge der benötigte Dateien aus dem Dokument holen
$entry = $zipfile.Entries | ?{$_.Name -eq 'content.opf'} | select -First 1
if ($entry){
# content.opf extrahieren
[System.IO.Compression.ZipFileExtensions]::ExtractToFile($entry,$contentfile)
# Titel leeren (wegen einer Property, hier per einfachem Regex-Replace)
(gc $contentfile) -replace '(<dc:title[^>]*>).*?(</dc:title>)','$1$2' | set-content $contentfile
# Alternative Variante zum Löschen des Titels via XML (nicht aktiv)
<#
$xml = [xml](gc $contentfile)
$xml.package.metadata.title.InnerText = ''
$xml.Save($contentfile)
#>
# alte content.opf aus der epub-Datei entfernen
$entry.Delete()
# geänderte Dateien wieder hinzufügen
[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zipfile,$contentfile,$entry.Fullname) | out-null
write-host "$($_.FullName) ==> Update durchgeführt." -ForegroundColor Green
}else{
write-host "$($_.FullName) ==> Datei enthält keine 'content.opf'." -ForegroundColor Yellow
}
# Zipfile-Resourcen freigeben
$zipfile.Dispose()
}
Hi Andy,
kein Problem, hier bekommst du das richtige Package für Windows 7
Windows Management Framework 4.0
oder das aktuellste:
Windows Management Framework 5.0
(Hinweis: PS 5.0 sollte zum Zeitpunkt dieses Posts nicht auf Systemen installiert werden die eines der folgenden Produkte verwenden: Exchange Server 2013, Exchange Server 2010 SP3, SharePoint Server 2013, SharePoint Server 2010, System Center 2012 Virtual Machine Manager)
Als Suchbegriff ist hier immer "Windows Management Framework" der richtige Begriff.
Grüße Uwe
kein Problem, hier bekommst du das richtige Package für Windows 7
Windows Management Framework 4.0
oder das aktuellste:
Windows Management Framework 5.0
(Hinweis: PS 5.0 sollte zum Zeitpunkt dieses Posts nicht auf Systemen installiert werden die eines der folgenden Produkte verwenden: Exchange Server 2013, Exchange Server 2010 SP3, SharePoint Server 2013, SharePoint Server 2010, System Center 2012 Virtual Machine Manager)
Als Suchbegriff ist hier immer "Windows Management Framework" der richtige Begriff.
Grüße Uwe
Hallo Andy,
habe gerade eine Testdatei mit eben dem von dir zitierten Titel ausgestattet. Läuft ohne Probleme. Könnte es sein dass du die Datei gerade geöffnet hattest und sie gelockt war? Gegen ein "Zugriff verweigert" kann ich sowieso nichts weiter tun, als den Fehler abzufangen und die entsprechende Datei zu ignorieren. Bearbeiten kann man sie im gelockten Zustand nicht.
Nur aus Interesse: Was ist denn in deinem Script die Zeile 46, auf die sich die Fehlermeldung bezieht?
Grüße
rubberman
/EDIT Mir ist gerade noch eingefallen, dass die Datei(en) das Attribut "schreibgeschützt" haben könnten. Hab das mal im Script berücksichtigt...
/EDIT2 Zeile 13: FOR /F durch FOR /R Schleife ersetzt.
/EDIT3 Bugfix für Dateiinhalte ohne Timestamps.
/EDIT4 Errorhandling geändert.
/EDIT5 ePUB Dateien, bei denen das Update fehlschlägt, aus dem extrahierten Inhalt neu erstellen.
/EDIT6 Kommentare hinzugefügt
/EDIT7 Support für Dateinamen mit Prozentzeichen hergestellt
habe gerade eine Testdatei mit eben dem von dir zitierten Titel ausgestattet. Läuft ohne Probleme. Könnte es sein dass du die Datei gerade geöffnet hattest und sie gelockt war? Gegen ein "Zugriff verweigert" kann ich sowieso nichts weiter tun, als den Fehler abzufangen und die entsprechende Datei zu ignorieren. Bearbeiten kann man sie im gelockten Zustand nicht.
@if (@x)==(@y) @end /* Gültige Zeile in Batch und JScript, die einen JScript Kommentar einleitet.
:: Batch Part
@echo off &setlocal
REM Pfad zur 7z.exe
set "p7z=%ProgramFiles%\7-Zip\7z.exe"
REM Pfad zu den ePUB Dateien
set "epubdir=D:\eBooks"
REM 7z Pfad zu 8.3 Kurznamen konvertieren
for %%i in ("%p7z%") do set "p7z=%%~fsi"
REM Rekursiv nach allen .epub Archiven suchen.
for /r "%epubdir%" %%h in ("*.epub") do (
REM Fehlerflag. Initial wird angenommen, dass ein Fehler auftritt und die Variable ist definiert.
set "fail=1"
REM Eingenschaften "Schreibgeschützt", "System" und "Versteckt" beim gefundenen Archiv entfernen.
attrib -r -s -h "%%~h"
REM Inhalt des Archivs auflisten und nur die Zeile mit der .opf Datei aus der Liste extrahieren.
for /f "delims=" %%i in ('%p7z% l "%%~h" -y^|findstr /ie "\.opf"') do (
REM Gefundene Zeile einer Variablen zuweisen.
set "ln=%%i"
REM Verzögerte Variablenerweiterung einschalten, um die neue Variable in einem Zeilenblock verarbeiten zu können.
setlocal EnableDelayedExpansion
REM Die ersten 20 Zeichen der Variable werden abgeschnitten. Dort findet sich das Timestamp der Datei, falls dieses gestzt war.
REM Das erste Token enthält die Dateiattribute, alles nach dem dritten Token ist Pfad und Name der .opf Datei im Archiv.
REM Nach dem Splitten der Zeile wird die Verzögerte Variablenerweiterung ausgeschaltet und geprüft, dass der gefundene Pfad kein Verzeichnis ist.
for /f "tokens=1,3*" %%j in ("!ln:~20!") do endlocal &if "%%j" lss "D" (
REM Temporäres Verzeichnis für zu entpackende Dateien anlegen.
md "unzip"
REM Die .opf Datei unter Beibehaltung ihres Pfads entpacken.
>nul 2>&1 %p7z% x "%%~h" "%%l" -o"unzip" -y
REM Falls das erfolgreich war und die ausgepackte Datei existiert...
if exist "unzip\%%l" (
REM In das temporäre Verzeichnis wechseln.
pushd "unzip"
REM Eingenschaften "Schreibgeschützt", "System" und "Versteckt" der .opf Datei entfernen.
attrib -r -s -h "%%l"
REM Diese Scriptdatei als JScript ausführen, wobei der Pfad der .opf Datei übergeben wird um dort den Titel entfernen zu können.
cscript //nologo //e:jscript "%~fs0" "%%l"
REM Wenn das Entfernen erfolgreich war ...
if not errorlevel 1 (
REM Update der .opf Datei im Archiv.
>nul 2>&1 %p7z% u "%%~h" "%%l" -up1q1r2x2y2z2w2 -y
REM Falls das erfolgreich war, Fehlerflag entfernen, ansonsten ...
if not errorlevel 2 (set "fail=") else (
REM Alle anderen Dateien und Verzeichnisse aus dem Archiv zur bereits geänderten .opf Datei entpacken.
>nul 2>&1 %p7z% x "%%~h" -xr!"*.opf" -y
REM Falls das erfolgreich war ...
if not errorlevel 2 (
REM Originalarchiv löschen.
del /f "%%~h"
REM Archiv aus den entpackten Dateien neu erstellen.
>nul 2>&1 %p7z% a "%%~h" -r -tzip -y
REM Falls das erfolgreich war, Fehlerflag entfernen.
if not errorlevel 2 set "fail="
)
)
)
REM In das ursprüngliche Arbeitsverzeichnis zurückwechseln.
popd
)
REM Temporäres Verzeichnis löschen.
rd /s /q "unzip"
)
)
REM Anhand des Fehlerflags Fehler- oder Erfolgsmeldung ausgeben.
if defined fail (>&2 echo *** Fehler: "%%~h") else echo OK: "%%~h"
)
pause
REM Batchverarbeitung beenden.
exit /b
Hier endet der JScript Kommentar: */
/* JScript Part */
// Try Block, um Ausnahmefehler der JScript Verarbeitung abzufangen.
try {
// Instanz des Microsoft.XMLDOM Objektes erstellen
var oXmlDoc = new ActiveXObject('Microsoft.XMLDOM');
// Flag um zu signalisieren, dass auf eine vollständig geldene XML Datei gewartet werden soll.
oXmlDoc.async = false;
// Die übergebene .opf Datei als XML Text laden.
oXmlDoc.load(WScript.Arguments(0));
// Fehlerobjekt deklarieren.
var oErr = oXmlDoc.parseError;
// Falls beim Parsen des Dateiinhalts kein Fehler aufgetreten ist ...
if (oErr.errorCode == 0) {
// Knotenobjekt deklarieren und initialisieren, das den Titel enthält.
var oNode = oXmlDoc.documentElement.selectSingleNode('//metadata/dc:title');
// Falls der Knoten gefunden wurde ...
if (null != oNode) {
// Text des Knotens löschen.
oNode.text = '';
// XML Text in die .opf Datei zurückschreiben.
oXmlDoc.save(WScript.Arguments(0));
// Script beenden und 0 zurückgeben.
WScript.Quit(0);
}
}
// Diese Punkt wird erreicht, wenn eines der if Statements FALSCH ergeben hat. Script beenden und 1 als Fehlerindikator zurückgeben.
WScript.Quit(1);
}
// Der catch Block wird ausgeführt, wenn ein Ausnahmefehler aufgetreten ist.
catch(e) {
// Script beenden und 1 als Fehlerindikator zurückgeben.
WScript.Quit(1);
}
Grüße
rubberman
/EDIT Mir ist gerade noch eingefallen, dass die Datei(en) das Attribut "schreibgeschützt" haben könnten. Hab das mal im Script berücksichtigt...
/EDIT2 Zeile 13: FOR /F durch FOR /R Schleife ersetzt.
/EDIT3 Bugfix für Dateiinhalte ohne Timestamps.
/EDIT4 Errorhandling geändert.
/EDIT5 ePUB Dateien, bei denen das Update fehlschlägt, aus dem extrahierten Inhalt neu erstellen.
/EDIT6 Kommentare hinzugefügt
/EDIT7 Support für Dateinamen mit Prozentzeichen hergestellt
Hallo Andy,
was zum Lesen:
Kombinierendes Zeichen
Kombinierende diakritische Zeichen
Ob ich das lösen kann, weiß ich noch nicht. Muss testen...
Grüße
rubberman
was zum Lesen:
Kombinierendes Zeichen
Kombinierende diakritische Zeichen
Ob ich das lösen kann, weiß ich noch nicht. Muss testen...
Grüße
rubberman
Hallo Andy.
Das DIR Command scheint ein paar Bugs zu haben.
Tausche Zeile 8 (bezieht sich auf mein letztes Script).
Alles was so nicht funktioniert, werde ich nicht lösen können, fürchte ich.
Ausrufezeichen dürften aber nie ein Problem gewesen sein, es sei denn du rennst dein gesamtes Script mit eingeschalteter verzögerter Variablenerweiterung (setlocal EnableDelayedExpansion) was fatal wäre.
Grüße
rubberman
Das DIR Command scheint ein paar Bugs zu haben.
Tausche Zeile 8 (bezieht sich auf mein letztes Script).
for /r "%epubdir%" %%h in ("*.epub") do (
Alles was so nicht funktioniert, werde ich nicht lösen können, fürchte ich.
Ausrufezeichen dürften aber nie ein Problem gewesen sein, es sei denn du rennst dein gesamtes Script mit eingeschalteter verzögerter Variablenerweiterung (setlocal EnableDelayedExpansion) was fatal wäre.
Grüße
rubberman
Hallo Andy.
Alles längst getestet. Der Inhalt in der .opf ist kein Problem. Der wird überhaupt nicht vom Script betrachtet und nur stumpf durch einen "leeren" String ersetzt. Daran liegt es also schon mal nicht.
Aber, wie sich aus deinen Fehlermeldungen erkennen lässt, wurden Dateinamen (.epub) mit solchen Zeichen nicht vernünftig verarbeitet. Die Änderung von FOR /F zu FOR /R, wie oben geschrieben, sollte das Problem beseitigen.
Also noch mal: Der Inhalt der .opf war bislang nie Grund für Fehler, auch wenn es für dich vielleicht den Anschein hatte.
Grüße
rubberman
Kannst du in deinem Script bitte noch folgenden Sonderfälle berücksichtigen! Der Bindestrich "-" und noch ein verlängerter Bindestrich "–" sowie Ausrufezeichen "!" für das Feld <dc:title></dc:title> in der content.opf !
Alles längst getestet. Der Inhalt in der .opf ist kein Problem. Der wird überhaupt nicht vom Script betrachtet und nur stumpf durch einen "leeren" String ersetzt. Daran liegt es also schon mal nicht.
Aber, wie sich aus deinen Fehlermeldungen erkennen lässt, wurden Dateinamen (.epub) mit solchen Zeichen nicht vernünftig verarbeitet. Die Änderung von FOR /F zu FOR /R, wie oben geschrieben, sollte das Problem beseitigen.
Also noch mal: Der Inhalt der .opf war bislang nie Grund für Fehler, auch wenn es für dich vielleicht den Anschein hatte.
Grüße
rubberman
Hallo Andy,
das sind aber merkwürdige Fehler. Hmm, ohne die Originaldateien kann ich da nicht viel sagen. Klar kann es bei Dateien aus dem Internet sein, dass sie auf einem anderen Betriebssystem erstellt wurden (bspw. Linux), wo Dinge valide sind, die unter Windows ein No Go sind. Dafür gibt es einige Beispiele...
Wie auch immer, freut mich wenn es deinen Anforderungen genügt Ich ändere mein letztes Script dann noch mit der FOR /R Schleife für die Nachwelt ...
Grüße
rubberman
das sind aber merkwürdige Fehler. Hmm, ohne die Originaldateien kann ich da nicht viel sagen. Klar kann es bei Dateien aus dem Internet sein, dass sie auf einem anderen Betriebssystem erstellt wurden (bspw. Linux), wo Dinge valide sind, die unter Windows ein No Go sind. Dafür gibt es einige Beispiele...
Wie auch immer, freut mich wenn es deinen Anforderungen genügt Ich ändere mein letztes Script dann noch mit der FOR /R Schleife für die Nachwelt ...
Grüße
rubberman
OK, nachdem ich die 3 Originaldateien bekommen habe, hat sich herausgestellt dass der Inhalt der ersten beiden keine Timestamps enthält und das Parsen der Listenausgabe von 7-Zip dadurch fehlschlägt. Das Bugfix habe ich oben im Script eingefügt.
Die dritte Datei scheint tatsächlich defekt zu sein. Ein Hinzufügen, Ändern oder Löschen von Dateien aus dem ePUB Archiv ist mit keinerlei Mitteln zu erreichen, obwohl die Datei nicht schreibgeschützt ist und eingesehen werden kann.
Grüße
rubberman
Die dritte Datei scheint tatsächlich defekt zu sein. Ein Hinzufügen, Ändern oder Löschen von Dateien aus dem ePUB Archiv ist mit keinerlei Mitteln zu erreichen, obwohl die Datei nicht schreibgeschützt ist und eingesehen werden kann.
Grüße
rubberman