Jump to content

Per VBS führende Nullen in den Dateinamen einfügen!


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo!

 

Ich kenne mich mit VBS nicht so besonders aus und suche einen Script, der recursiv (Subdirektories) für alle Dateien so viele führende Nullen einfügt, wie ich benötige (per Parameter) damit die Dateienamen alle gleich lang sind.

 

Ich denke, daß sowas nicth so schwer ist, schaffe es alleine aber nicht!

 

Gruß und Dank!

Herbert

Link zu diesem Kommentar

@Herbert Leitner

 

Ist das noch ein aktuelles Problem?

 

' Die Aufgabe könnte mich interessieren.

' Grundsätzlich geht das technisch)

' und ich denke ich bekäme das auch hin

' habe diesbezüglich mal meinen Fundus geprüft

' habe da brauchbare Teile

' Müßte ich sinnvoll zusammenbauen

' Ist also im Wesentlichen von dem Aufwand abhängig

 

' Auch der tiefere Sinn ist mir noch verborgen

' Schönheit / Übersicht ???

' Aber ist ja fast egal

' Eher interessant unter Motivationsgesichtspunkt

'

' Mache solche Sachen eher als Übung für mich

' so eine Art Hobby aber wie wahrscheinlich

' jeder im EDV-Bereich habe auch ich ein Zeitproblem

'

' Und wie mein Vorredner (blub) schon erwähnte,

' nicht so sonderlich schwer aber etwas Zeit geht da schon drauf.

'

' Auf jeden Fall hätte ich da im Vorfeld einige Fragen

 

' Um vieviele Dateien handelt es sich in etwa

' wie tief verschachtelt

 

' spielt performance ein wesentliche Rolle

 

' nach welchen Kriterien wieviele Nullen

' als Vorgabe ?? Try and error??

'

' wie soll mit dem problem max.Pfadlänge (x<250 ca)umgegangen werden

' ist das eine oneway Aktion

' sprich einmal Nullen hinzufügen und fertig

' oder auch irgendwann wieder führende Nullen entfernen

 

' Zugriffrechte sicher gegeben oder prüfroutinen nötig

'

' Kann ich davon ausgehen dass bevor das script verwendet wird

' eine vernüftige Datensicherung gemacht wird?

' Sorry natürlich teste ich so was vorher

' aber Murphy Law gilt immer und überall

'

'----------

'

' meine zur Zeit angedachte Vorgehensweise

'

'1. rekursives auslesen der Verzeichnissstruktur

' wegschreiben der Fiele in txt mit trennzeichen

' Felder: lfdNr;Pfad;filename;längePfad (vomRoot);länge Filename;

' ergänzt gegebenenfalls um prüfkennzeichen

'

' 2. Schritt auswertung der txt nach ???

' sofern hier klare gesetzmäßigkeiten gäbe dann viel einfacher

' dann könnte direkt der neue filenamensvorschlag in 1 generiert werden

'

' 3. entweder direkt umwandeln durch verwendung der txt und oder ergänzung

' der datei und dann umwandeln

'

' beim abändern wären wahrscheinlich ein änderungslog sinnvoll

' wäre mir zumindest bei größerer fileanzahl sonst zu unsicher

'

' ciao pacobay

Link zu diesem Kommentar

Hallo!

 

Dank Dir für die umfangreichen Antwort.

 

Gleich vorab. Ich hatte gehofft, daß ich auf die schnelle im Intenret einen Script oder ein Programm finden würde das sowas macht.

 

Der Grund ist eher optisch. Der Windows Explorer ab XP mag ja mit der Anzeige der richtigen Reihenfolge klar kommen, andere Programme wie der Total Commander nicht.

 

Wenn folgende Dateien vorhanden sind 8.jpg, 9.jpg.10.jpg,11.jpg,

dann sortiert der Windows Explorer "richtig" (kann man abschalten, ich weiß), alle anderen Programme aber nicht. Da kommt dann 10, 11, 8, 9.

 

Spätestens dann, wenn der Inhalt der Verzeichnisse unüberschaubar wird (ist bei mir der Fall) dann ist die Suche und das Navigieren ein Graus.

 

Die Geschwindigkeit des Scripts spielt keine Rolle, weil das Umbenennen eine einmalige Sache ist. Wie gesagt, es geht da um 10.000e von Unterverzeichnissen, deshalb war die Rekursion wichtig.

In erster Linie liegen da Bilder (Digicams seit 11 Jahren), etwas Musik, Texte, ...

 

Den Aufwand für die Rekursion hatte ich mir schlimmer vorgestellt. Ich kann Rekursion zwar erklären aber ich verstehe nicht wie das geht! (ist komisch, ich weiß).

Das war aber dann noch die einfachste Übung.

 

Ich habe den Script jetzt in mühevoller Arbeiten und zwei durchzechten Nächten (jeweils bis ca. 04:00) selbst in VBScript erstellt. Viel Arbeit ist die Parameterübergabe und Prüfung auf Gültigkeit und aub Plausibilität gegangen.

 

Der Script heißt jetzt y-Rename.vbs und hat volgende Parameter

y-Rename <Verzeichnis> [<minLänge> ]

Verzehnis ist das Startverzeichnis

minLänge: Ist der Dateiname kürzer als minLänge dann werden 0er (Null) aufgefüllt

s: Subdirectories = Rekursion

 

Ich habe versucht, den Script so abszusichern, daß alle Fehleingaben geprüft werden und das Script keinen Schaden anrichtet, wenn was passiert.

 

Das Script schreibt eine Protokolldatei für die Fehlermeldungen und eine Undo-Datei.

Ist das Ergebnis nicht so wie es sein sollte, dann kann das rückgängig gemacht werden.

 

Die Protokolldatei ist notwendig weil es sein kann, daß eine Datei nicht umbenannt werden kann, weil der "Ziel"-Name bereits vorhanden ist. Das ist z.B. der Fall, wenn ich die Dateinamen auf 4 Zeichen verlängere und folgende zwei Dateien vorhanden sind.

1.txt, 0001.txt

Solche Sachen werden ausgefilter.

 

Dazu habe ich noch verschiedene Korrekturen implementiert:

- ungültige/ungeliebte Zeichen werden entfernt

- Umlaute werden ersetzt durch U-e

- mehrere Punkte oder Leerzeichen die hintereinander sind werden entfernt und auch Kombinationen davon

- Punkte und Leerzeichen vorne und hinten werden entfernt

 

Alles in allem bin ich da jetzt an die 30 - 40 Stunden davor gesessen und habe fast zwei Nächte durch gemacht. Es macht aber Spaß, zu sehen was VBScript alles kann. Ich bin davon begeistert - und kenne kaum 0,1% davon.

 

Die Länge des Scripts ist an die 400 Zeilen. Von der Funkton von vom Namen habe ich mich etwas inspierierne lassen von x-Rename von der PC-Welt. Das Ding ist genial - leider fehlt dort die Möglichkeit, am Anfang der Dateinamen eine bestimmte Anzahl von Zeichen zu löschen.

 

Wie gesagt, wenn ich geahnt hätte, wie viel Arbeit das ist, dann hätte ich vermutlich erst gar nicht angefangen!

 

Gruß und Dank!

Herbert

Link zu diesem Kommentar

Hallo HL,

 

ist denfinitiv mehr als der übliche Hello World-Anfang!

Ich finde es besonders gut, dass Du gleich von Anfang an

mit Logs und Fehlerabfangfunktionen arbeitest.

:thumb1: Respekt!

 

Würde das script mal gerne sehen.

PM?

 

Sofern Du noch Probleme mit den führenden Nullen hast,

das Zauberwort nach dem Du suchen mußt ist :

Regular Expressions bzw. Die Replace Methode des RegExp Objektes

 

Infos findest Du u.A. in der MS WSH Hilfedatei

(bei MS downloadbar vgl. hilfreiche Tools unten )

 

etwas primitiver wäre etwas in der Art

 

     Do until Left(zuWandelnderAusdruck,1)<>"0"
              part12=right(part12,len(Part12)-1)
     loop

 

Eine alternative Vorgehnsweise zu Nullen hinzufügen wäre möglicherweise gewesen:

Neu durchzunummerieren. Nach dem Motto: Alles +10000

Also aus 8.jpg wird 10008.jpg und aus 100.jpg würde 10100.jpg etc

Damit wäre dein Sortierungsproblem gelöst und für zukünftige Anpassungen hast du ganzzahlige Werte (integer) die viel einfacher zu verarbeiten sind.

 

Wie auch immer, Haupsache Du hast etwas, mit dem Du leben kannst.

 

Viel Erfolg bei Deinen nächsten Schritten

pacobay

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...