Lange Dateinamen bei/von Mail-Exporten - Überlänge abfangen

cumulonimbus8

Fleet Admiral
Registriert
Apr. 2012
Beiträge
18.400
Moin!

Ich stelle die Frage mal hier, weil vermutlich eher hier als beim Betriebssystem Erfahrungswerte zu finden sind.

Plattform ist WIN (10, aber ab XP kann vorkommen). Benutzen tue ich ThunderBird und das AddIn «Import-Export-Tools». Selbst ein vom Tool angelegtes Konstrukt »C:\A\B\Posteingang_20160528-1122\Nachrichten« frisst schon Länge (nach Word: 44 Zeichen).

Ich kopierte das in eine Struktur deren Vorspann ein wenig mehr Platz beansprucht denn nur C:\A\B. Dort stießen einige Namen ›an die Wand‹.

Frage: Gibt es ein Tool das mir unter Angabe des ›Ziel-Containers‹ alle Dateien listet die im ›Quell-Container‹ dann zu lang sein werden?
Wie ich das löse sei ein anderes Problem. Problem wird allenfalls sein, sind es ein paar oder ein ganzer Rattenschwanz?

CN8
 
Mit autoit. Wenn Dateinamen größer gleich 44 Zeichen, dann schreibt es in eine Textdatei
Code:
#include <MsgBoxConstants.au3>
#include<Date.au3>

While 1
Pruefen()
WEnd

Func Pruefen()
    Local $sValue = InputBox("", "Eingabe hier tätigen", "", "")

$iLength = StringLen($sValue)

If $iLength >= 44 Then
$file = FileOpen("test_" & _NowDate() & ".txt", 1)
FileWrite($file, $sValue & @CRLF )
FileClose($file)
EndIf

EndFunc
 
Das dürfte - schnell drübergelesen - nicht ganz in die Richtung gehen an die ich dachte.

Das Skript müsste den aktuellen ›Vorspann‹ (C:\A\B - 6 Zeichen) ermitteln oder erfragen, dann den am Ziel und dessen Länge und zuletzt alle (so frei sind wir mal) Unterordner in C:\A\B ablaufen einzelne Dateinamenlängen samt Pfad zu erfassen und lesbar zu listen (oder in Datei zu schreiben).

Das könnte ich mit AutoIt oder WSH auch irgendwie selbst programmieren. Ich hoffte (Faultier von Natur aus) auf ein Tool das sich dieser Pfadlängenproblematik angenommen hätte.

CN8
 
So auf die Schnelle per CMD & autoit

1) in den besagten Ordner wechseln und dort folgendes Kommando ausführen:
Code:
dir /b /s /ad > C:\meine_daten.txt
Damit werden sämtliche Ordner und Unterverzeichnisse in die Datei meine_daten.txt geschrieben

2) folgendes autoit ausführen:
Code:
#include <MsgBoxConstants.au3>
#include <Date.au3>
#include <file.au3>

Dim $aRecords
If Not _FileReadToArray("meine_daten.txt", $aRecords) Then
    MsgBox(4096, "", "Datei nicht vorhanden")
    Exit
 EndIf

For $x = 1 To $aRecords[0]
$iLength = StringLen($aRecords[$x])

If $iLength >= 44 Then
$file = FileOpen("test_" & _NowDate() & ".txt", 1)
FileWrite($file, $aRecords[$x] & @CRLF )
;    MsgBox(0, "", $aRecords[$x])
 EndIf

Next

Liest meine_daten.txt ein. Ist jetzt ein Pfad größer/gleich 44 Zeichen, so wird dieser in eine txt-Datei geschrieben
 
dir /b /s /ad > C:\meine_daten.txt
…liefert nur Directories - /a-d wäre schicker ;)

Das Skript das die Resultat wiederum in eine Datei tut nützt mir in der Praxis nicht recht viel.
Im Explorer (irgendwo muss ich an eine umzubenennende Datei ran) sind die schieren Namen schon unhandlich lang, und mit etwas Glück können das auch 10.000 und mehr Files sein.

Ich müsste mir zuerst eine Zähler programmieren; viel mehr noch brauche ich die Länge dies Ziel-Ordners (variabel, wer hätt's gedacht - und ich kenne die mit Glück erst dann wenn ich ihn kenne…) um meine ›Containerlänge‹ abzuziehen - und berechnen wann die volle Dateinamenlänge dann über 250 (sic!) kommt.
In dem Falle zöge ich WSH mit dem FSO vor (zugegeben ist mir AutoIt in der Handhabung der Syntax lieber) um erst mal zu sichten. Die Benennung der Quellfiles ist z.T. blöd da ausgerechnet am Ende zählende Nummern vorkommen können, der »automatische Rasenmäher« fällt hier also aus. U.U. kommt es dümmer die Zielstruktur nachzubilden und da rein die langnamigen Files ablegen zu lassen. Ist wiederum aus anderer Sicht heraus umständlich.

Ich würde sagen wir belassen es und ich brüte mal ob ich eine bessere Strategie ausbrüten kann.
Da lange Dateinamen immer ein Problem sind wundert es mich nur, dass es kein Tool dafür gibt.

CN8
 
Um die Geschichte variabel zu halten:
Code:
    #include <MsgBoxConstants.au3>
    #include <Date.au3>
    #include <file.au3>

    Dim $aRecords
    If Not _FileReadToArray("meine_daten.txt", $aRecords) Then
        MsgBox(4096, "", "Datei nicht vorhanden")
        Exit
     EndIf

$sLaenge = InputBox("", "Wie lang ist der Pfad?", "", "")

    For $x = 1 To $aRecords[0]
    $iLength = StringLen($aRecords[$x])

    If $iLength >= $sLaenge Then
    $file = FileOpen("test_" & _NowDate() & ".txt", 1)
    FileWrite($file, $aRecords[$x] & @CRLF )
    ;    MsgBox(0, "", $aRecords[$x])
     EndIf

    Next

Wenn bekannt ist, daß nach x-Zeichen die Struktur auf Fehler läuft, dann verstehe ich die Problematik nicht ganz. Im gleichem Atemzug werden ja dann die entsprechenden Pfade/Dateien angezeigt?! Wenn es automatisiert abläuft & am Tagesende angezeigt wird, wo die Dateien liegen, kann es ja entsprechend verschoben werden..

Evtl. ist hier etwas hilfreiches dabei
 
Zuletzt bearbeitet:
Feste Längen hat es leider nicht.
Die Files werden lokal aufbereitet und kommen per Fernübertragung auf einen Server. Meldungen sind da nicht sehr aussagekräftig ;)
Und die Pfadlänge würde ich per Copy-Paste von Strings ermitteln und nicht zählen :D

CN8
 
Zurück
Oben