django.durano
Goto Top

Probleme mit Umlauten bei Übergabe an VBS (Exiftool charset)

Hallo, ich habe folgendes Problem.

Ich möchte mit einer Batchdatei eine MP4-Videodatei mittels Exif auslesen und die ausgelesenen Tags dann in eine XML-Datei schreiben.

Das auslesen funktioniert auch mit der Batch ohne weiteres ich kann auch die Parameter an das Vbscript übergeben, das mir dann eine XMl-Datei erstellt.
Mein Problem sind nun die Umlaute. Wenn ich die ausgelesenen Tags in eine TXT-Datei umleite bekomme ich keine Probleme, dann werden mir die Umlaute sauber in der TXT-Datei angezeigt.
Wenn ich aber die Tags in den Variablen anzeigen lasse bzw. diese an das Vbsscript übergebe kommt nur noch mist dabei raus.
Habe schon ein bisschen nachgelesen, aber entweder stehe ich aufm Schlauch oder ich mache was falsch.

Ich habe schon versucht die Codepage zu ändern auf 1252 leider ohne Erfolg.
Die Kodierung meiner Batch habe ich auf OEM850 geändert dann bekomme ich zumindest ein echo äää auch als dieses angezeigt aber nicht die Tags.
Ein ändern der Sprache auf MS-Dos hat auch nichts gebracht.

Schätze ich werde irgendwo noch einen Fehler haben oder etwas falsch verstanden haben.

Vielleicht kann mir hier ja jemand weiter helfen.

Ein kompletter umstieg auf VBS kommt für mich leider nicht in Frage da ich mich nur sehr dürftig damit auskenne.

Hier der Batchcode.


@echo off 

set "cntr1=0"  
set "cntr2=0"  
set "cntr3=0"  
set staffel_txt=One Piece - Mux Tool - Staffelliste.txt

set "test=T:\KUC NG OP Mux Tool\One Piece - Mux Tool V1 1 [KUC NG]\One Piece - Mux Tool - Staffelliste.txt"  



:TagsAuslesen

setlocal enabledelayedexpansion

set "pfad=%1"  
set "pfad1=%~dp1"  
set /a "cntr1+=1"  
set /a "cntr3+=1"  
set /a "cntr4=%cntr3%+1"  
set /a "cntr5=%cntr3%+2"  
set "ChapterUID=%cntr3%%cntr4%%cntr5%"  


for /f "tokens=2,3,4 delims=:" %%o in ('T:\exiftool\exiftool.exe -Title -TrackNumber -DiskNumber -TVNetworkname -TVSeason -TVEpisode -Description -LongDescription -ContentCreateDate -Genre %Pfad%') do (  
		set /a cntr2=!cntr2! + 1
		set tag!cntr2!=%%o %%p %%q
)

for /f "tokens=1,2,3,4 delims=^&" %%a in ("%tag10%") do set "Genre1=%%a" & set "Genre2=%%b" & set "Genre3=%%c" & set "Genre4=%%d"  

set "Title=%tag1%"  
set "TrackNumber=%tag2:~0,-7%"  
set "DiskNumber=%tag3:~0,-7%"  
set "TVNetworkname=%tag4%"  
set "TVSeason=%tag5%"  
set "TVEpisode=%tag6%"  
set "Description=%tag7%"  
set "LongDescription=%tag8%"  
set "ContentCreateDate=%tag9%"  



:LeerzeichenEntfernen
:loop1
if "%Title:~0,1%"==" " set "Title=%Title:~1%" & goto :loop1  
if "%TrackNumber:~0,1%"==" " set "TrackNumber=%TrackNumber:~1%" & goto :loop1  
if "%DiskNumber:~0,1%"==" " set "DiskNumber=%DiskNumber:~1%" & goto :loop1  
if "%TVNetworkname:~0,1%"==" " set "TVNetworkname=%TVNetworkname:~1%" & goto :loop1  
if "%TVSeason:~0,1%"==" " set "TVSeason=%TVSeason:~1%" & goto :loop1  
if "%TVEpisode:~0,1%"==" " set "TVEpisode=%TVEpisode:~1%" & goto :loop1  
if "%Description:~0,1%"==" " set "Description=%Description:~1%" & goto :loop1  
if "%LongDescription:~0,1%"==" " set "LongDescription=%LongDescription:~1%" & goto :loop1  
if "%ContentCreateDate:~0,1%"==" " set "ContentCreateDate=%ContentCreateDate:~1%" & goto :loop1  
if "%Genre1:~0,1%"==" " set "Genre1=%Genre1:~1%" & goto :loop1  
if "%Genre2:~0,1%"==" " set "Genre2=%Genre2:~1%" & goto :loop1  
if "%Genre3:~0,1%"==" " set "Genre3=%Genre3:~1%" & goto :loop1  
if "%Genre4:~0,1%"==" " set "Genre4=%Genre4:~1%" & goto :loop1  
:loop2
if "%Title:~-1%"==" " set "Title=%Title:~0,-1%" & goto :loop2  
if "%TrackNumber:~-1%"==" " set "TrackNumber=%TrackNumber:~0,-1%" & goto :loop2  
if "%DiskNumber:~-1%"==" " set "DiskNumber=%DiskNumber:~0,-1%" & goto :loop2  
if "%TVNetworkname:~-1%"==" " set "TVNetworkname=%TVNetworkname:~0,-1%" & goto :loop2  
if "%TVSeason:~-1%"==" " set "TVSeason=%TVSeason:~0,-1%" & goto :loop2  
if "%TVEpisode:~-1%"==" " set "TVEpisode=%TVEpisode:~0,-1%" & goto :loop2  
if "%Description:~-1%"==" " set "Description=%Description:~0,-1%" & goto :loop2  
if "%LongDescription:~-1%"==" " set "LongDescription=%LongDescription:~0,-1%" & goto :loop2  
if "%ContentCreateDate:~-1%"==" " set "ContentCreateDate=%ContentCreateDate:~0,-1%" & goto :loop2  
if "%Genre1:~-1%"==" " set "Genre1=%Genre1:~0,-1%" & goto :loop2  
if "%Genre2:~-1%"==" " set "Genre2=%Genre2:~0,-1%" & goto :loop2  
if "%Genre3:~-1%"==" " set "Genre3=%Genre3:~0,-1%" & goto :loop2  
if "%Genre4:~-1%"==" " set "Genre4=%Genre4:~0,-1%" & goto :loop2  

for /f "tokens=2 delims=^=" %%a in ('findstr /I "Staffel%DiskNumber%=" "%test%"') do set "TotalParts=%%a"  
set "ContentCreateDate=%ContentCreateDate: =-%"  


:XmlErstellen



setlocal disabledelayedexpansion


wscript.exe "PfadzurVBS\Figure 1.vbs" "%Title%" "%TrackNumber%" "%DiskNumber%" "%TVNetworkname%" "%TVSeason%" "%TVEpisode%" "%Description%" "%LongDescription%" "%ContentCreateDate%" "%ChapterUID%" "%TotalParts%" "%Genre1%" "%Genre2%" "%Genre3%" "%Genre4%"  
pause

shift

if not [%1]== goto TagsAuslesen


EDIT:

Lösung:

An den Anfang der Bat-Datei ein CHCP 1252.
Außerdem den Exifaufruf erweiterten
'T:\exiftool\exiftool.exe -charset Latin -Title -TrackNumber -DiskNumber -TVNetworkname -TVSeason -TVEpisode -Description -LongDescription -ContentCreateDate -Genre
Die Kodierung der BAT-File und der VBS-File muss ANSI sein.

Danach klappt die Übergabe und die Ausgabe in die XML-Datei.

Wer allerdings in der Konsole es auch richtig angezeigt bekommen möchte als Echo z.B. muss den Type Font der Konsole auf Lucida ändern.

Gruß

Content-Key: 383451

Url: https://administrator.de/contentid/383451

Printed on: April 18, 2024 at 05:04 o'clock

Member: emeriks
emeriks Aug 15, 2018 updated at 14:10:56 (UTC)
Goto Top
Hi,
was spricht dagegen, in der VBS die übergebenen Parameter mittels Suchen-Erstzen zu "normalisieren". Die falschen Umlaute kommen doch immer mit dem selben Zeichencode rüber, oder?

Bsp.:
Const Ae = Chr(0815)
Title = Replace(Title, Ae, "Ä")  

E.

Edit:
Für das Ersetzen natürlich eine Funktion bauen, damit Du nicht für alle Parameter einzeln diese Replace-Kommandos brauchst.
Member: Django.Durano
Django.Durano Aug 15, 2018 at 16:00:36 (UTC)
Goto Top
Bin leider nicht so fit mit VBS.
Wenn ich deinen Code nun so bei mir einfüge bekomme ich einen Fehler Literalconstante fehlt/bzw. erwartet.

Die Umlaute kommen mit total komischen Zeichen rüber zumindest sieht es so aus.
Wenn ich ein echo Title machen sind da total komischen Zeichen mit dabei.
Member: rubberman
Solution rubberman Aug 15, 2018 at 18:52:26 (UTC)
Goto Top
Ich weiß nicht was exiftool auswirft und wie/ob es auf die Änderung der Codepage reagiert. Irgendwie sollte das aber helfen. Lass mal die Codierung des Scripts bei Windows-1252 (so wie es Notepad bei Einstellung Ansi eigentlich speichern sollte). Dann spiel mal ein bisschen mit folgenden Konfigurationen in allen Kombinationsmöglichkeiten:
- das CHCP 1252an den Anfang des Scripts
- das CHCP 1252nach der Schleife mit dem exiftool Aufruf
- Aufruf des VBScripts mit cscript.exe //nologostatt wscript.exe

Steffen
Member: Django.Durano
Django.Durano Aug 17, 2018 at 13:03:07 (UTC)
Goto Top
@rubberman

Ich habe nun etwas probiert und auch herausgefunden das man bei exiftool auch ein charset/codepage bei der Ausgabe mit angeben kann.
Standard ist UTF8 habe es mal auf Latin was 1252 entspricht geändert.

Habe dann etwas mit der Codepage in der Bat probiert es gab aber leider keine brauchbare Lösung und die Umlaute wurden immer noch nicht richtig angezeigt.
Member: rubberman
Solution rubberman Aug 17, 2018 at 14:21:29 (UTC)
Goto Top
Zitat von @Django.Durano:
habe es mal auf Latin was 1252 entspricht geändert.
Das klingt aber eigentlich sehr vielversprechend. Script in Windows-1252 speichern und gleich am Anfang des Scripts das CHCP 1252dann sollte die Sache funktionieren.

Steffen
Member: Django.Durano
Django.Durano Aug 18, 2018 at 09:29:40 (UTC)
Goto Top
Jetzt hat es funktioniert.

Habe jetzt das CHCP 1252 an den Anfang des Scriptes gesetzt und den Exifaufruf um das Charset Latin erweitert.
Die Bat-Datei ist in der Kodierung ANSI und nun passt es am Ende in der XMl-Datei.

Allerdings in der Konsole bekomme ich es immer noch nicht richtig angezeigt.

In der Konsole bekomme ich es nur richtig angezeigt wenn ich die Type Font auf Lucida ändere.
Bin da eher durch Zufall drüber gestossen als ich mit UTF-8 als Codepage probiert habe, da muss man es nämlich ändern damit es funktioniert.

Das die Ausgabe in der Konsole nicht richtig ist stört mich jetzt aber herzlich wenig.


Gruß
Member: rubberman
rubberman Aug 18, 2018 at 09:38:23 (UTC)
Goto Top
Zitat von @Django.Durano:
Die Bat-Datei ist in der Kodierung ANSI und nun passt es am Ende in der XMl-Datei.
ANSI ist eine Gruppe von unterschiedlichsten Codierungen. Aber wie oben schon geschrieben, bedeutet das dass die Defaultcodierung herangezogen wird, was hierzulande Windows-1252 sein sollte. Passt.

Allerdings in der Konsole bekomme ich es immer noch nicht richtig angezeigt.
Das erfordert mehr Aufwand. Wenn du es nicht brauchst, lass es face-wink

Steffen