Thread Dateinamen mit Sonderzeichen / DOS-Kommandos (3 answers)
Opened by Pumuckel at 2009-01-10 20:05

Pumuckel
 2009-01-10 20:05
#117837 #117837
User since
2009-01-10
2 Artikel
BenutzerIn
[default_avatar]
Hi,

ich parse unter Win Dateinamen (aus NTFS-Dateisystem), die alle möglichen Sonderzeichen enthalten. Das Einlesen mit opendir war nicht erfolgreich, da kamen bei den problematischen Dateien nur 8.3-gekürzte an. (Lange Dateinamen oder "normal codierte" Umlaute waren nicht das Problem, da funktionierte opendir problemlos.) Die Sonderzeichen habe ich so in den Griff bekommen:

Code: (dl )
1
2
3
my $cmd = 'cmd.exe /u /c dir /B "'.$dir.'" 2>&1';
my $cmdResult = qx($cmd);
$cmdResult = decode('utf16le', $cmdResult);


So liefert das dir-Kommando Unicode zurück, aus dem ich mit decode auch die vollständigen Dateinamen erhalte. Diese Dateien möchte ich jetzt umbenennen. Das Ersetzen der Sonderzeichen funktioniert problemlos (zB /\x{251c}\x{255d}/ue/). Der neue Dateiname ist also Sonderzeichen-frei.

Mein Problem: Setze ich jetzt das DOS rename-Kommando mittels qx ab, schlägt das fehl ("Das System kann den angegebenen Pfad nicht finden."). Rename selbst in einer DOS-Box auf eine problematische Datei abgesetzt funktioniert. Der alte Dateiname enthält noch die Sonderzeichen, und die werden einfach nicht "richtig" übergeben. Ich habe schon versucht stdout mittels binmode auf OEM zu setzen, ebenso den alten Dateinamen in alles mögliche zu codieren: Nichts funktioniert.

Wie müsste man da vorgehen?

View full thread Dateinamen mit Sonderzeichen / DOS-Kommandos