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

Pfade mit kyrillischen Zechen in eine Text-Datei ausgeben und in VBS einlesen und verarbeiten.

Frage Entwicklung Batch & Shell

Mitglied: evinben

evinben (Level 2) - Jetzt verbinden

31.07.2012, aktualisiert 11:29 Uhr, 5313 Aufrufe, 6 Kommentare

Hallo,

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 sehen

òðàåêòîðèÿ.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:
01.
set AllFiles =%* 
02.
chcp 1251 
03.
for %%d in (%AllFiles%) do echo %%~d>>FullFileName.txt
Es werden die Pfade in der Datei FullFileName.txt ausgegeben und dort sehen sie dann wie folgt aus:
<code>
"D:\Ëè÷íûå íàñòðîéêè\òðàåêòîðèÿ.txt"
"D:\Personliche Einstellungen\Frasbahn.txt"
<code>

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
Mitglied: rubberman
31.07.2012 um 18:59 Uhr
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
Bitte warten ..
Mitglied: rubberman
31.07.2012, aktualisiert um 23:18 Uhr
Hallo nochmal,

also ... mögliche Lösung mit Batch wäre eine umständliche Konvertierung zu Unicode.
*.bat
01.
@echo off &setlocal 
02.
 
03.
:: ACP 
04.
>nul chcp 1252 
05.
 
06.
:: Byte Order Mark für UTF-16 LE [Nur einmal an den Anfang der Textdatei setzen!] 
07.
if not exist "FullFileName.txt" ( 
08.
  (set /p =ÿþ) <nul >"FullFileName.txt" 
09.
10.
 
11.
:: cmd /u für Unicode 
12.
for %%d in (%*) do cmd /u /c "echo %%~d>>"FullFileName.txt"" 
13.
 
14.
:: zurück zur OEMCP 
15.
>nul chcp 850 
16.
 
17.
:: weiterer Code
Im VBScript dann als Unicode Datei öffnen
*.vbs
01.
Const ForReading = 1 
02.
Const NoCreate = False 
03.
Const AsUnicode = -1 
04.
 
05.
Dim oFSO, oFile 
06.
 
07.
Set oFSO = CreateObject("Scripting.FileSystemObject") 
08.
Set oFile = oFSO.OpenTextFile("FullFileName.txt",ForReading , NoCreate, AsUnicode) 
09.
WScript.Echo oFile.ReadAll 
10.
oFile.Close
Grüße
rubberman
Bitte warten ..
Mitglied: evinben
31.07.2012, aktualisiert um 23:56 Uhr
Hallo rubbermann,

danke für deine Antwort!
So wie ich sehe, hast du dich nicht zum ersten Mal mit diesem Thema befasst und hast bereits tolle Vorschläge gemacht:
http://www.administrator.de/articles/detail.php?id=135614

Und noch etwas möchte ich zu deiner folgenden Aussage hinzufügen:
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.
Wenn wir auf der Website hier nachschauen http://www.5goldig.de/Russische_Tastatur/kyrillisch-umwandeln.html, dann stellen wir fest, dass eine Konvertierung von Kyrillisch Windows 1251 in UTF-8 die Zeichen ohne jegliche Informationsverluste wieder im Originalzustand zurückstellt. Also es ist eine Umwandlung in beiden Richtungen möglich.
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.
Eventuell schafft so eine Konvertierung in UTF-8 für VB-Script (zur korrekten Weiterverarbeitung der Pfade – also Dateien per VB-Script verschieben, löschen, kopieren usw…) eine Abhilfe? Bzw. kann VBS mit Unicode gut umgehen?

Gruß
evinben
Bitte warten ..
Mitglied: evinben
01.08.2012 um 01:19 Uhr
Hallo rubbermann,

zu dem
also ... mögliche Lösung mit Batch wäre eine umständliche Konvertierung zu Unicode.
*.bat
und zu dem
Im VBScript dann als Unicode Datei öffnen
*.vbs

sage ich laut:

GENIAL!


Auch die raffinierte Lösung mit
01.
(set /p =ÿþ) <nul >"FullFileName.txt" 
finde ich einfach bewundernswert! Ansonsten ist der Vorschau im Windows-Explorer nicht korrekt und vermutlich auch andere nicht hervor schaubare Kinderkrankheiten.

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 .

Ich hoffe ab nun keine sonderlichen Probleme mehr in der Zukunft mit den gemischten Zeichen in den Pfaden zu haben und generell bei der Verarbeitung von Zechenketen im Allgemeinen.

Dies hat mir bisher immer Probleme bereitet und es hat sich die Überwindung - dankbar deiner großartigen Unterstützung - echt gelohnt!

Projekt abgeschlossen.

Schönen Gruß
evinben
Bitte warten ..
Mitglied: rubberman
01.08.2012 um 20:54 Uhr
Hallo evinben!

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 ...

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

Zitat von evinben:
kann VBS mit Unicode gut umgehen?
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 ...

Grüße
rubberman
Bitte warten ..
Mitglied: evinben
02.08.2012 um 06:43 Uhr
Hallo rubberman!

Danke für die kleine Aufklärung in der Zeichen-Wellt.
Ich habe mir in den letzten Tagen einiges über Unicode – gigantische Fülle an Information - und generell über die Codepages im Allgemeinen durchgelesen und ehrlich es ist für mich mehr erschreckender, als hilfreicher gewesen, da alleine in dieser Richtung sehr viel Wissen und Einarbeitung erforderlich ist. Ein - zwei Tage schnell - schnell wäre hier nichts…

Schön, dass es euch hier gibt – sehr gepflegter Forum!

Gruß
evinben
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
gelöst VBS Script in eine Textdatei ausgeben (VBS mit Batch zusammenführen) (5)

Frage von Luuke257 zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch - Datei aus Ordner einlesen mit Ausnahmen! (4)

Frage von Daedrafaction zum Thema Batch & Shell ...

Batch & Shell
Text-Datei auslesen und Inhalt als Parameter übergeben (1)

Frage von aubm2013 zum Thema Batch & Shell ...

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

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...