Pfade mit kyrillischen Zechen in eine Text-Datei ausgeben und in VBS einlesen und verarbeiten.
Hallo,
nehmen wir in dem nachfolgenden Beispiel die folgenden beiden Dateien an - 1x auf Deutsch und 1x übersetzt auf Russisch:
òðàåêòîðèÿ.txt
Frasbahn.txt
dennoch können diese Pfade vom Batch problemlos weiterverarbeitet werden – z. B. mit den aus der Text-Datei zurückeingelesenen Pfade die beiden Dateien löschen, verschieben und sonstiges…
Anders sieht es leider aus, wenn die Pfade aus der gleichen Text-Datei von einem VB-Script eingelesen und weiterverarbeitet werden: das VB-Script zeigt die eingelesenen Pfade in einem MsgBox zwar so an, wie diese in der Text-Datei zu lesen sind (òðàåêòîðèÿ.txt), kann diese dennoch nicht korrekt weiter verarbeiten - löschen, verschieben u. s. ist nicht möglich.
(Es wird kein Fehler bei der Skript-Ausführung angezeigt.)
Anbei ist ein kleiner Kode-Abschnitt aus der Batch-Datei, auf welche die obigen problematischen Dateien gezogen und losgelassen werden:
Es werden die Pfade in der Datei FullFileName.txt ausgegeben und dort sehen sie dann wie folgt aus:
"D:\Ëè÷íûå íàñòðîéêè\òðàåêòîðèÿ.txt"
"D:\Personliche Einstellungen\Frasbahn.txt"
Die Text-Datei in Unicode abzuspeichern schafft uns hier leider keine Abhilfe - das VB-Skript zeigt die eingelesenen Pfade in einem MsgBox zwar mit anderen Zeichen an, wie diese in der Text-Datei zu sehen sind, kann sie auch hier nicht weiter verarbeiten - löschen, verschieben u. s. ist nicht möglich.
So wie ihr es bereits bemerkt habt, entstehen mit der obigen Methode gleich zwei Schwierigkeiten:
1. Die Codepage muss für jede Sprache umgestellt werden – d. h. in unserem Beispiel, dass schon vor der Ausgabe jedes Dateipfades der richtigen Codepage automatisch erkannt und geschaltet werden muss.
2. Die Pfade werden von dem VB-Skript nicht korrekt verarbeitet.
Auf einer Windows 7 Umgebung mit russischer Ländereinstellung funktioniert das Vorhaben problemlos (wenn unter Systemsteuerung\Zeit, Sprache und Region > Sprache für Unicode- inkompatible Programme das Gebietschema auf Russisch geändert ist).
Das Umstellen auf Russisch ist natürlich keine Lösung – jede Umgebung muss natürlich weiterhin unverändert bleiben (abgesehen davon, dass beim Umschalten jeweils Neustarten erforderlich ist).
Wenn die Verarbeitung eines mit deutschen und russischen Zeichen gemischten Pfades, aufgrund der Beschränkungen der cmd.exe-Architektur, nicht möglich ist (z. B. ein klassischer Beispiel D:\Persönliche Einstellungen\траектория.txt), müssen natürlich alternativere Varianten her, wobei mir persönlich Batch echt lieber wäre.
Über eure Lösungsvorschläge wäre ich euch sehr dankbar!
Gruß
evinben
nehmen wir in dem nachfolgenden Beispiel die folgenden beiden Dateien an - 1x auf Deutsch und 1x übersetzt auf Russisch:
D:\Persönliche Einstellungen\Fräsbahn.txt
D:\Личные настройки\траектория.txt
Es werden Dateien, die kyrillische Buchstaben in dem Namen enthalten, zur Weiterverarbeitung auf eine Batch-Datei gezogen und losgelassen (empfangene Argumente %* wären dann: "траектория.txt" "Fräsbahn.txt"). Im Batch werden die vollständigen Pfade als Argumente in Variable gesetzt und anschließend jeder Pfad in einer txt-Datei auf separater Zeile ausgegeben (ganz klassisch im ANSI-Textformat). Wenn nun diese Text-Datei geöffnet und betrachtet wird, sind dort die kyrillischen Buchstaben dann nicht mehr 1:1 zu sehenD:\Личные настройки\траектория.txt
òðàåêòîðèÿ.txt
Frasbahn.txt
dennoch können diese Pfade vom Batch problemlos weiterverarbeitet werden – z. B. mit den aus der Text-Datei zurückeingelesenen Pfade die beiden Dateien löschen, verschieben und sonstiges…
Anders sieht es leider aus, wenn die Pfade aus der gleichen Text-Datei von einem VB-Script eingelesen und weiterverarbeitet werden: das VB-Script zeigt die eingelesenen Pfade in einem MsgBox zwar so an, wie diese in der Text-Datei zu lesen sind (òðàåêòîðèÿ.txt), kann diese dennoch nicht korrekt weiter verarbeiten - löschen, verschieben u. s. ist nicht möglich.
(Es wird kein Fehler bei der Skript-Ausführung angezeigt.)
Anbei ist ein kleiner Kode-Abschnitt aus der Batch-Datei, auf welche die obigen problematischen Dateien gezogen und losgelassen werden:
set AllFiles =%*
chcp 1251
for %%d in (%AllFiles%) do echo %%~d>>FullFileName.txt
"D:\Ëè÷íûå íàñòðîéêè\òðàåêòîðèÿ.txt"
"D:\Personliche Einstellungen\Frasbahn.txt"
Die Text-Datei in Unicode abzuspeichern schafft uns hier leider keine Abhilfe - das VB-Skript zeigt die eingelesenen Pfade in einem MsgBox zwar mit anderen Zeichen an, wie diese in der Text-Datei zu sehen sind, kann sie auch hier nicht weiter verarbeiten - löschen, verschieben u. s. ist nicht möglich.
So wie ihr es bereits bemerkt habt, entstehen mit der obigen Methode gleich zwei Schwierigkeiten:
1. Die Codepage muss für jede Sprache umgestellt werden – d. h. in unserem Beispiel, dass schon vor der Ausgabe jedes Dateipfades der richtigen Codepage automatisch erkannt und geschaltet werden muss.
2. Die Pfade werden von dem VB-Skript nicht korrekt verarbeitet.
Auf einer Windows 7 Umgebung mit russischer Ländereinstellung funktioniert das Vorhaben problemlos (wenn unter Systemsteuerung\Zeit, Sprache und Region > Sprache für Unicode- inkompatible Programme das Gebietschema auf Russisch geändert ist).
Das Umstellen auf Russisch ist natürlich keine Lösung – jede Umgebung muss natürlich weiterhin unverändert bleiben (abgesehen davon, dass beim Umschalten jeweils Neustarten erforderlich ist).
Wenn die Verarbeitung eines mit deutschen und russischen Zeichen gemischten Pfades, aufgrund der Beschränkungen der cmd.exe-Architektur, nicht möglich ist (z. B. ein klassischer Beispiel D:\Persönliche Einstellungen\траектория.txt), müssen natürlich alternativere Varianten her, wobei mir persönlich Batch echt lieber wäre.
Über eure Lösungsvorschläge wäre ich euch sehr dankbar!
Gruß
evinben
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 188875
Url: https://administrator.de/forum/pfade-mit-kyrillischen-zechen-in-eine-text-datei-ausgeben-und-in-vbs-einlesen-und-verarbeiten-188875.html
Ausgedruckt am: 08.04.2025 um 01:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo evinben!
Ich muss mich auch erst mal mit der Materie beschäftigen, nur soviel vorab:
Mit Batch bist du ziemlich weit von einer möglichen Lösung entfernt. Batch hat einen besonders tollen Unicode Support
Die CMD ist durchaus in der Lage Unicodezeichen aus einer Pfadangabe in eine Variable zu packen. Nun wirds aber auch schon kritisch. Das Schreiben dieser Pfade in eine Datei erfolgt durch ECHO Umleitung. Damit hast du gleich 2 Probleme auf dem Hals.
- Erstens musst du die 16 Bit Breite eines Characters in Unicode auf 8 Bit reduzieren (... was eigentlich nur funktionieren kann, wenn die höchsten 8 Bit 0 sind. Ich frage mich gerade wieso das trotzdem funktioniert ...). Die FOR Schleife scheint das irgendwie zu bewerkstelligen.
- Zweitens musst du einen Zeichensatz wählen, der das dann auch noch mit der eingestellten Schriftart in anzeigbare Zeichen bringt. Mit "ganz klassisch im ANSI-Textformat" magst du zwar recht haben, was den rohen Inhalt der Datei anbetrifft, ob es aber für jedes der kyrillischen Zeichen solch eine verdrehte ANSI Entsprechung gibt, wage ich mal vorsichtig zu bezweifeln.
Grüße
rubberman
Ich muss mich auch erst mal mit der Materie beschäftigen, nur soviel vorab:
Mit Batch bist du ziemlich weit von einer möglichen Lösung entfernt. Batch hat einen besonders tollen Unicode Support
- Erstens musst du die 16 Bit Breite eines Characters in Unicode auf 8 Bit reduzieren (... was eigentlich nur funktionieren kann, wenn die höchsten 8 Bit 0 sind. Ich frage mich gerade wieso das trotzdem funktioniert ...). Die FOR Schleife scheint das irgendwie zu bewerkstelligen.
- Zweitens musst du einen Zeichensatz wählen, der das dann auch noch mit der eingestellten Schriftart in anzeigbare Zeichen bringt. Mit "ganz klassisch im ANSI-Textformat" magst du zwar recht haben, was den rohen Inhalt der Datei anbetrifft, ob es aber für jedes der kyrillischen Zeichen solch eine verdrehte ANSI Entsprechung gibt, wage ich mal vorsichtig zu bezweifeln.
Grüße
rubberman
Hallo nochmal,
also ... mögliche Lösung mit Batch wäre eine umständliche Konvertierung zu Unicode.
*.bat
Im VBScript dann als Unicode Datei öffnen
*.vbs
Grüße
rubberman
also ... mögliche Lösung mit Batch wäre eine umständliche Konvertierung zu Unicode.
*.bat
@echo off &setlocal
:: ACP
>nul chcp 1252
:: Byte Order Mark für UTF-16 LE [Nur einmal an den Anfang der Textdatei setzen!]
if not exist "FullFileName.txt" (
(set /p =ÿþ) <nul >"FullFileName.txt"
)
:: cmd /u für Unicode
for %%d in (%*) do cmd /u /c "echo %%~d>>"FullFileName.txt""
:: zurück zur OEMCP
>nul chcp 850
:: weiterer Code
Im VBScript dann als Unicode Datei öffnen
*.vbs
Const ForReading = 1
Const NoCreate = False
Const AsUnicode = -1
Dim oFSO, oFile
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFile = oFSO.OpenTextFile("FullFileName.txt",ForReading , NoCreate, AsUnicode)
WScript.Echo oFile.ReadAll
oFile.Close
Grüße
rubberman
Hallo evinben!
Erst mal danke für die Blumen

VBS selbst nur wenig besser als Batch. Wie du siehst waren auch in dem von dir verlinkten Beitrag Eigenschaften und Methoden von ActiveX Objekten nötig. Aber wenigstens ist die Referenzierung solcher Objekte in einem VBScript möglich ...
Grüße
rubberman
Erst mal danke für die Blumen
Zitat von @evinben:
Am Ende des Betrages, in welchem du deine Vorschläge geäußerst hast (siehe link oben), wollte der Benutzer NBTKetchup@ eine Konvertierung von ANSI in UTF-8, die leider immer noch nicht vollendet worden ist.
Habe ich leider nie bemerkt, ist aber nun beantwortet. Vielleicht stolpert ja noch mal jemand beim Suchen drüber ...Am Ende des Betrages, in welchem du deine Vorschläge geäußerst hast (siehe link oben), wollte der Benutzer NBTKetchup@ eine Konvertierung von ANSI in UTF-8, die leider immer noch nicht vollendet worden ist.
Zitat von @evinben:
... dann stellen wir fest, dass eine Konvertierung von Kyrillisch Windows 1251 in UTF-8 die Zeichen ohne jegliche Informationsverluste wieder im Originalzustand zurückstellt.
Das möchte ich aber nicht per Batch versuchen. Falls du mal viel Langeweile hast, kannst du dich an Codepage 65001 versuchen. Viel Spaß dabei ... dann stellen wir fest, dass eine Konvertierung von Kyrillisch Windows 1251 in UTF-8 die Zeichen ohne jegliche Informationsverluste wieder im Originalzustand zurückstellt.
VBS selbst nur wenig besser als Batch. Wie du siehst waren auch in dem von dir verlinkten Beitrag Eigenschaften und Methoden von ActiveX Objekten nötig. Aber wenigstens ist die Referenzierung solcher Objekte in einem VBScript möglich ...
Zitat von @evinben:
Ich frage mich nur, wie du dir das alles beigebracht hast und was da für ein Know-how in dir stecken muss... Was ist das überhaupt "ÿþ" und warum sollte man es wissen
.
Das kommt mit der Zeit. Wenn man ein Problem mit unterschiedlichen Zeichensätzen hat, beschäftigt man sich eben mal 'ne Stunde damit und kommt somit unweigerlich auch mit 0xFF 0xFE als BOM für UTF-16 Little Endian in Berührung. Es ist nur noch ein kleiner Step bis zur Umsetzung per Batch ...Ich frage mich nur, wie du dir das alles beigebracht hast und was da für ein Know-how in dir stecken muss... Was ist das überhaupt "ÿþ" und warum sollte man es wissen
Grüße
rubberman