fraenky
Goto Top

Mit VB Script Dateien in Unterordnern umbenennen.

In drei Unterordnern müssen Dateien umbenannt werden, ohne die Dateiendung zu verändern.

Hallo zusammen.
Ich habe in einer Datei zeilenweise die neuen Dateinamen stehen. Das Format:
021_Dateiname oder auch 01I_Dateiname, also eine Buchstaben-Zahlenkombination vor dem ersten Unterstrich. In drei Unterordnern namens mp3 , php , Texte soll das Script die umzubenennenden Dateien an dem unveränderten ersten Teil des Dateinamens identifizieren und umbenennen. In den drei Unterordnern befinden sich nach der Operation also die gleichen Dateinamen, allerdings mit unterschiedlichen Endungen.
Dateien, die nicht identifiziert werden konnten, sollten in einer Protololldatei gespeichert werden.
Ich stelle mir den Ablauf so vor, das nach starten des Scriptes ein Explorerfenster sich öffnet, in dem ich die Datei mit den neuen Namen benenne, danach ist dann alles klar.
Gut währe es auch, wenn das Script den letzten Pfad abspeichert und bei erneutem Start automatisch diesen anzeigt, weil meine Ordner teilweise tief verschachtelt sind.
Kann mir hier jemand weiterhelfen?
Grüße
Fraenky

Content-ID: 72678

Url: https://administrator.de/contentid/72678

Printed on: December 14, 2024 at 20:12 o'clock

bastla
bastla Nov 04, 2007 at 17:16:46 (UTC)
Goto Top
Hallo Fraenky!

... nach der Operation also die gleichen Dateinamen, allerdings mit unterschiedlichen Endungen.
Welche Endungen sind gemeint, wie ist der Zusammenhang zwischen den aufgelisteten Dateinamen und den Unterordnern / Dateien darin zu verstehen - könntest Du diesen vielleicht ganz konkret darstellen und dabei auch gleich die Möglichkeit berücksichtigen, ob/dass durch die Umbennung gleichnamige Dateien in einem Ordner entstehen könnten?

... ein Explorerfenster sich öffnet, in dem ich die Datei mit den neuen Namen benenne ...
Damit ist die Auswahl der Dateiliste gemeint (unklar wegen "benenne")?
Falls Du übrigens schon selbst Hand anlegen willst - zum Handwerkszeug gehören ua "InStr()" / "InStrRev()", "Left()" / "Mid()", die "Folders"- sowie "Files"-Auflistungen sowie die "File"-Eigenschaft "Name".

Grüße
bastla
Fraenky
Fraenky Nov 04, 2007 at 18:54:10 (UTC)
Goto Top
Hallo bastla.
Danke für Deine Auflistung der benötigten Befehle, aber so weit bin ich jetzt noch nicht und ist auch momentan nicht meine Priorität. Ich komme jetzt mit meiner Web Seite in die konkrete Phase und da habe ich viel zu lernen.
Die Endungen sind so, wie es die Ordner vermuten lassen. Im php Ordner liegen 001_DateiName1.php, 002_DateiName2.php usw. Im mp3 Ordner liegen 001_DateiName1.mp3, 002_DateiName2.mp3 usw und das selbe im Ordner Texte, hier liegen 001_DateiName1.rtf, 002DateiName2.rtf usw. Hier fält mir noch ein, das das Trennzeichen, das ja bei den alten Dateinamen ein Unterstrich war, jetzt ein - Bindestrich sein soll.
Zu den Dopplungen: Diese können ja nicht entstehen, weil ja meine Liste auch keine Dopplungen enthällt. Ich habe zwar gleiche Dateinamen, diese haben aber verschiedene Endungen und liegen in verschiedenen Ordnern.
Zum Explorerfenster:
Ja, hier möchte ich die Datei mit den neuen Dateinamen angeben. Diese Datei liegt direkt über den angesprochenen Unterordnern.
Grüße
Fraenky
bastla
bastla Nov 04, 2007 at 19:00:20 (UTC)
Goto Top
Hallo Fraenky!

Es ist mir trotzdem noch nicht klar, wie nun die Umbenennung durchgeführt werden soll (also welchen Zusammenhang es zwischen den neuen Dateinamen aus der Liste und den bestehenden Dateinamen der Dateien in den Ordnern gibt) bzw wie die "Identifizierung" vonstatten gehen soll, damit
Dateien, die nicht identifiziert werden konnten
als solche erkannt werden können.

Grüße
bastla
Fraenky
Fraenky Nov 05, 2007 at 08:46:41 (UTC)
Goto Top
Hallo bastla.
Sorry für die späte Antwort, gestern kam ich leider nicht mehr dazu.
Wie ich ja jetzt nach einer Apache Installation unter Windows weiß, dürfen keine Sonderzeichen in Pfaden und Dateinamen auftauchen. Also muß ich diese jetzt beseitigen. Ich habe also meine Dateiliste überarbeitet und alle Sonderzeichen entfernt und ebenfalls den Unterstrich mit dem Bindestrich ersetzt. Also in der Datei mit den neuen Dateinamen stehen jetzt:
001-Neuer-Datei-Name1
002-Neuer-Datei-Name2
003-Neuer-Datei-Name3
usw.
Auf der Webseite habe ich einmal ein mp3 mit dem Lied, das im Ordner mp3 liegt. Hat den Namen 001_Alter_Name1_mit_Sonderzeichen.mp3
002_Alter_Name2_mit_Sonderzeichen.mp3
003_Alter_Name3_mit_Sonderzeichen.mp3
Dann habe ich zu dem Lied den Text mit der deutschen Übersetzung, der im Ordner Texte liegt: 001_Alter_Name1_mit_Sonderzeichen.rtf
002_Alter_Name2_mit_Sonderzeichen.rtf
003_Alter_Name3_mit_Sonderzeichen.rtf
Und den selben Text noch mal als html code:
001_Alter_Name1_mit_Sonderzeichen.php
002_Alter_Name2_mit_Sonderzeichen.php
003_Alter_Name3_mit_Sonderzeichen.php
Zu erkennen ist jetzt ganz klar, das das Gemeinsame zwischen altem und neuen Dateinamen der erst Teil des Dateinamens vor dem Unterstrich bzw Bindestrich ist. Dieser ist das Identifizierungsmerkmal. Wie gesagt, manche Dateinamen beginnen auch mit einer Buchstaben-zahlen-Kombination.
Falls ich bei der Modifizierung der neuen Dateinamen(ca 800) einen Fehler gemacht habe oder das Programm aus irgendwelchen Gründen eine Datei nicht identifizieren kann, muß ich das wissen, weil sonst auf der Webseite ein toter Link existiert, also Protokolldatei.
In diesem Sinne ist es auch gut, wenn Du die neuen Dateinamen noch mal überprüfen läßt auf:
keine Kommas im neuen Dateinamen
keine doppelten Bindestriche -- zwischen den Namensteilen
keine Sonderzeichen im neuen Dateinamen( Die entsprechenden Sonderzeichen hatten wir ja schon in den anderen Scripts identifiziert).
Wenn was gefunden, ebenfalls in die Protokolldatei.
So, jetzt müßte die Aufgabenstellung klarer beschrieben sein.
Grüße
Fraenky
Fraenky
Fraenky Nov 06, 2007 at 08:50:25 (UTC)
Goto Top
Hallo bastla.
Den Check der neuen Linknamen kannste auch weglassen, wenne nich willst. Wann schibste denn das Prog rüber?
Gruß
Fraenky
Fraenky
Fraenky Nov 06, 2007 at 10:21:38 (UTC)
Goto Top
"Zu Beginn gab es den Plan. Dann kamen die Annahmen. Und die Annahmen waren ohne Form. Und der Plan war ohne Substanz. Und Dunkelheit war auf den Gesichtern der Arbeiter Und sie redeten und sagten: "Das ist alles ###e und es stinkt". Und die Arbeiter gingen zu Ihren Aufsehern und sagten: "Es ist ein Container voll mit Exkrementen, und es ist sehr stark, so dass niemand es ertragen kann.". Und die Aufseher gingen zu ihren Managern und sagten: "Es ist wie ein Haufen Kompost und wir können mit dem Gestank nicht leben." Und die Manager gingen zu ihren Direktoren und sagten: "Es ist wie eine Ladung von Düngemitteln und niemand kann seine Strenge ertragen". Und die Direktoren sprachen unter sich und sagten: "Es enthält das, was Blumenwachstum anregt und es ist sehr stark". Und die Direktoren gingen zu den Vizepräsidenten und sagten: "Es fördert das Wachstum und es ist sehr stark". Und die Vizepräsidenten gingen zum Präsidenten und sagten "Dieser neue Plan wird aktiv das Wachstum und die Stärke unserer Firma stärken mit sehr wirkungsvollen Effekten". Und der Präsident sah auf den Plan und sah, dass er gut war. Und der Plan wurde die Vorgabe. Und schon war die Kacke am Dampfen. "
englisches Original aus dem "Free Online Dictionary of Computing"

Diesen Text hatte ich nach dem Einloggen auf der rechten Seite gefunden. Soll das mein Feedback sein? Ich habe mich hier niemals als Profi vorgestellt, sondern immer als Hilfesuchender, der eben Logik etwas entwickelt hat.
Und wie hätte ich wissen sollen, das die Entwickler des Internet in Ihrer wahrscheinlich US amerikanischen Selbstherrlichkeit nur den US amerikanischen Buchstabenraum als gültig deklarierten und nicht den ganzen möglichen Buchstabensatz für die Gestalltung der Pfad- und Dateinamen erlaubten.
Ich gehe hier auf fremden Gebiet und bewege mich mutig vorran. Und wenn ich eine Lektion zu lernen habe, z.B. die, das keine Sonderzeichen in Pfaden und Dateinamen im Internet erlaubt sind, dann lerne ich sie und gehe weiter. Und wenn ich die 2400 Dateien von Hand umbennen muß, weil Du mir dieses für Dich sehr einfache Script nicht schreiben willst, dann werde ich auch das tuen. Ich bin jetzt konzentriert auf das Ziel, die Webseite fertigzustellen und da kann ich nicht so neben bei VB lernen. Fremdsprachen sind noch nicht meine stärke.
Entweder hilfst Du mir oder eben nicht. Deine freie Entscheidung. Aber wenn Du mir nicht mehr weiterhelfen willst, dann antworte auch nicht mehr auf meine Beiträge, damit auch andere Mitglieder auf meine Beiträge antworten und nicht denken, ich währe schon in besten Händen.
MfG
Fraenky
bastla
bastla Nov 06, 2007 at 11:58:55 (UTC)
Goto Top
Hallo Fraenky!

Vorweg:

Wann und zu welchem Thema ich Kommentare und Lösungsansätze poste, entscheide ich. Halblustige (oder doch ernsthaft anmaßende?) oder beleidigte Kommentare Deinerseits beeinflussen diese Entscheidung nur marginal.

Ob Du meine vorhergehenden Rückfragen zur Klarstellung Deines Vorhabens als Hilfestellung betrachtest, bleibt Dir überlassen.

Aus meiner diesbezüglichen Hilfe irgendeinen Anspruch auf eine (noch über den ursprünglichen Ansatz hinaus gehende) Lösung abzuleiten ist eine Fehleinschätzung.

Eine rasche Umsetzung (Deine Klarstellung des Ablaufes erfolgte gestern um 09:46:41 Uhr) geht zu Lasten der Bequemlichkeit.

Unter Berücksichtigung dieser Aspekte kann ich Dir folgende Batch-Lösung anbieten:
@echo off & setlocal
pushd "%~dp1"  
set "Log=%temp%\Ren.log"  
if exist "%Log%" del "%Log%"  
for /f "usebackq tokens=1* delims=-" %%i in ("%~nx1") do (  
	for %%f in (mp3 php Texte) do (
		if exist "%%f\%%i_*.*" (  
			ren "%%f\%%i_*.*" "%%i-%%j.*"  
		) else (
			echo %%f\%%i nicht gefunden>>"%Log%"  
		)
	)
)
sort "%Log%" /o RenameError.log  
popd
Verwendung: Speichere den Batch als zB "Renamer.cmd" auf dem Desktop oder erstelle zumindest eine leicht erreichbare Verknüpfung zur Batchdatei.

Navigiere im Explorer zum Ordner mit der Liste der neuen Dateinamen (und den Unterordnern "mp3", "php" und "Texte") und ziehe diese Textdatei auf die Batchdatei / die Verknüpfung.

Damit werden in den Unterordnern die Umbenennungen durchgeführt. Dateien, welche anhand des Kennzeichens (Teil vor dem ersten "-" des neuen Dateinamens) nicht gefunden wurden, scheinen danach (nach Unterordnern sortiert) in der Datei "RenameError.log" auf. Diese Datei wird im Ordner der Listendatei erstellt.

Grüße
bastla
Fraenky
Fraenky Nov 06, 2007 at 12:40:55 (UTC)
Goto Top
Hallo bastla.
Danke für Deine Hilfe.
Leider bekomme ich folgende Protokolleinträge, ohne das irgendwelche Umbenennungen stattfinden.
mp3\{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\f0\fs36 01 nicht gefunden
mp3\{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fcharset0 Arial;}} nicht gefunden
mp3\} nicht gefunden
php\{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\f0\fs36 01 nicht gefunden
php\{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fcharset0 Arial;}} nicht gefunden
php\} nicht gefunden
Texte\{\*\generator Msftedit 5.41.15.1507;}\viewkind4\uc1\pard\f0\fs36 01 nicht gefunden
Texte\{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fswiss\fcharset0 Arial;}} nicht gefunden
Texte\} nicht gefunden
Kannst Du da was mit anfangen?
Gruß
Fraenky
bastla
bastla Nov 06, 2007 at 14:21:38 (UTC)
Goto Top
Hallo Fraenky!

Kannst Du da was mit anfangen?
Nicht wirklich - hinter "mp3\" dürfte eigentlich nur ein Kennzeichen aufscheinen ...

Zur Sicherheit nochmals, wie ich das verstanden (und umzusetzen versucht) habe:
C:\
|--- ...
|--- ...
|--- ...
|--- Ordner
|    |--- mp3
|    |--- php
|    |--- Texte
In "Ordner" liegt eine Datei "NeueNamen.txt", Inhalt - wie oben von Dir beschrieben - je ein neuer Name (in der Form "001-Neuer-Datei-Name1") pro Zeile. Diese Datei soll auf das Script gezogen werden. Die "RenameError.log" sollte nach Durchlauf des Scripts (und falls es Fehler gab) ebenfalls in "Ordner" erstellt worden drin.

In den Unterordnern lauten die korrespondierenden Dateinamen zB "001_Alter_Name1_mit_Sonderzeichen.mp3", haben also als Trennzeichen zwischen Kennung und Namensrest "_" und nicht "-", wie es in der Datei für die neuen Namen verwendet wird.

Falls unter diesen Voraussetzungen der Fehler aufgetreten ist, wäre es sinnvoll, durch Eingabe von "dir C:\Ordner /s /b > C:\Inhalt.txt" an der Kommandozeile ein Inhaltsverzeichnis in eine Datei zu schreiben und dieses zusammen mit der "NeueNamen.txt" (auszugsweise) zu posten oder mir zu mailen.

Grüße
bastla
Fraenky
Fraenky Nov 06, 2007 at 17:30:41 (UTC)
Goto Top
Hallo bastla.
Du Schelm hast die Datei neue Namen fix eingebaut. Das bedeutet, das Script erwartet eine Datei mit Namen NeueNamen.txt.
Wenn dieses bakannt und eingehalten wird, läuft alles wunderbar, wie auch nicht anders zu erwarten war.
Was mich schon interessieren würde, wo Du diese Fixierung festgelegt hast. Auf den ersten Blick nähmlich nicht zu erkennen.
Also vielen Dank
Grüße
Fraenky
bastla
bastla Nov 06, 2007 at 18:09:43 (UTC)
Goto Top
Hallo Fraenky!

Du Schelm hast die Datei neue Namen fix eingebaut. Das bedeutet, das Script erwartet eine Datei mit Namen NeueNamen.txt.
Nun muss ich Dich schon wieder enttäuschen - ich habe nichts dergleichen getan (obwohl ... da Du es mir offensichtlich zutraust ... vielleicht bei nächster Gelegenheit ... face-devilish).

Bei inzwischen vorgenommenen Tests (auch unter Berücksichtigung von Leer- und Sonderzeichen im Dateinamen) kann ich jedenfalls (erwartungsgemäß) keinerlei aus der Namensgebung der fraglichen Datei resultierende Auswirkung auf den Ablauf des Batches feststellen.

Aus Sicherheitsgründen (um Problemen mit im Pfad enthaltenen Leerzeichen vorzubeugen) habe ich inzwischen oben in der zweiten Zeile noch Anführungszeichen ergänzt.

Grüße
bastla
Fraenky
Fraenky Nov 06, 2007 at 20:23:10 (UTC)
Goto Top
Peace bastla.
Habe gerade noch mal den Test gemacht. Wenn die Datei mit den neuen Dateinamen eine .rtf Datei ist, wirft es die Fehlermeldung aus. Hat also mit der Namensgebung selber nichts zu tuen. Sorry.
Aber diese cmd Dateien laufen ja auch super, auch wenn sie schwerer zu lesen sind, superschnell.
Also bastla
2400 mal Danke
Gruß
Fraenky
Biber
Biber Nov 06, 2007 at 20:59:12 (UTC)
Goto Top
Moin Fraenky und bastla,
Wenn die Datei mit den neuen Dateinamen eine .rtf Datei ist, wirft es die Fehlermeldung aus
OMG. OMFG.
Auf diese Fehlerursache wären weder bastla noch ich in den nächsten hundert Jahren gekommen. Obwohl... in Deinem Fehlerbeschreibungs-Posting ist es eigentlich klar zu erkennen.

Auf jeden Fall bin ich heilfroh, dass auch dieser Beitrag jetzt in ein paar Sekunden als "Gelöst" geschlossen werden wird.

@bastla
Wieder mal uneinschränkte Anerkennung Deiner Nervenstärke und Geduld. Respekt.

@Fraenky
Für den Fall, dass Du gar nicht ahnst, wie knapp dieser ganze Beitrag an einem jähen Verpuffen im Nirwana vorbeigeschrammt ist ...
Es war sehr sehr knapp davor.

Ich gehe davon aus, dass sich bei Dir auch die Nerven wieder beruhigt haben und der Stress etwas nachlässt.
Und dass Du diesen verbalen Abrutscher schon seit Stunden bedauerst.

Aber lass Dich bitte nie wieder zu so etwas herab bzw. hinreißen wie "..Und wenn ich die 2400 Dateien von Hand umbennen muß, weil Du mir dieses für Dich sehr einfache Script nicht schreiben willst, ....

Niemand hier sollte dieses Forum als seine persönliche 24x7x365-Gratis-Premium-Hotline verstehen oder glauben, Lösungs-Ansprüche für sein ureigenstes Elend einfordern zu können.

Und (@all) auch der Versuch wird bei den Mods hier IMMER zu einem fast unwiderstehlichen Recycling-Reflex führen.

Grüße
Biber