Dateinamen ändern in: Erstellungsdatum Erstellungszeit Name
[Edit] Aus meiner Sicht beantwortet. Biber [/Edit]
Erstmal ein wunderschönes Jahr 2006 an alle.
Hab mich hier schon reichlich umgesehen, komme aber nicht weiter.Will folgendes tun:
eine Reihe von Dateien in einem Verzeichnis soll nach folgenden Schema umbenannt werden:
alter name: audio__172.3800_2006-01-01_16-18-50_to_2006-01-01_16-18-51.wav
neuer name: %Erstellungsdatum(JJJJ.MM.TT)%_%Erstellungszeit(HH:MM:SS)%_%Neuer Name für 172.3800(Kanal-A)%.wav
Eine Übersetzungsliste für Kanal-A, Kanal-B etc liegt in einer set.cmd nach dem Muster bei:
set 172.3800=Kanal-A
set 85.6750=Kanal-B
etc.
(sind ca 120 Frequenzen)
Ich hoffe auf eure Hilfe.
Pemue
Erstmal ein wunderschönes Jahr 2006 an alle.
Hab mich hier schon reichlich umgesehen, komme aber nicht weiter.Will folgendes tun:
eine Reihe von Dateien in einem Verzeichnis soll nach folgenden Schema umbenannt werden:
alter name: audio__172.3800_2006-01-01_16-18-50_to_2006-01-01_16-18-51.wav
neuer name: %Erstellungsdatum(JJJJ.MM.TT)%_%Erstellungszeit(HH:MM:SS)%_%Neuer Name für 172.3800(Kanal-A)%.wav
Eine Übersetzungsliste für Kanal-A, Kanal-B etc liegt in einer set.cmd nach dem Muster bei:
set 172.3800=Kanal-A
set 85.6750=Kanal-B
etc.
(sind ca 120 Frequenzen)
Ich hoffe auf eure Hilfe.
Pemue
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 22572
Url: https://administrator.de/contentid/22572
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
12 Kommentare
Neuester Kommentar
Moin Pemue,
Dir auch ein erfolgreiches oder zumindest unterhaltsames Jahr 2006.
In dem <a href= target="blank"> Batch-Tut III </a> steht unter anderen eine GetAllDateTimeInfos.bat bereit zum Copy & Paste'n. Am besten vorher auf Druckansicht umschalten wegen der Zeilenumbrüche.
Die liefert Dir alle Datums- und Zeitvariablen mit folgendem auch abgedruckten Grundgerüst:
Call GetAllDateTimeInfos /s
(alle Variablen sind gesetzt)
set logfilename=%JJ%-%MM%-%TT%_%hh%$%min%.log
Call GetAllDateTimeInfos /u
Für die restliche Übersetzung (die Frequenzen) würde ich eine Schleife über diese merkwürdige Set.cmd laufen, wenn die schon mal da ist.
Ich nutze die jetzt allerdings nicht als Batchdatei, sondern als normale x-beliebiege Textdatei.
Wenn es eine einmalige Aktion ist, würde ich es direkt in einer *.bat-Datei machen.
Ungetestete Skizze:
Geändert habe ich bei der Umnbenennerei die Doppelpunkte bei der Zeitangabe ("22:53:07") in "22h53m07", weil Doppelpunkte in Dateinamen nur Unbill provozieren.*gg
Pfade zu Deinen *.wav-Dateien, zur GetAllDateTimeInfos.bat und zur Set.cmd musst Du bitte anpassen.
HTH Biber
Dir auch ein erfolgreiches oder zumindest unterhaltsames Jahr 2006.
In dem <a href= target="blank"> Batch-Tut III </a> steht unter anderen eine GetAllDateTimeInfos.bat bereit zum Copy & Paste'n. Am besten vorher auf Druckansicht umschalten wegen der Zeilenumbrüche.
Die liefert Dir alle Datums- und Zeitvariablen mit folgendem auch abgedruckten Grundgerüst:
Call GetAllDateTimeInfos /s
(alle Variablen sind gesetzt)
set logfilename=%JJ%-%MM%-%TT%_%hh%$%min%.log
Call GetAllDateTimeInfos /u
Für die restliche Übersetzung (die Frequenzen) würde ich eine Schleife über diese merkwürdige Set.cmd laufen, wenn die schon mal da ist.
Ich nutze die jetzt allerdings nicht als Batchdatei, sondern als normale x-beliebiege Textdatei.
Wenn es eine einmalige Aktion ist, würde ich es direkt in einer *.bat-Datei machen.
Ungetestete Skizze:
::---------snipp RenameWavs.Bat
@echo off & setlocal
Pushd X:\Verzeichnis\Mit\Den\Umzubenennenden\Dateien
:: For..IN..DO..Anweisung über alle Dateien ....
for /f "tokens=2,3 delims== " %%i in (Pfad\zur\set.cmd) do call :HandleFreq %i %j
Call GetAllDateTimeInfos /u
PopD
goto :eof
~~~~Ende der Schleife über alle 120 Frequenzen; Ende des Batches
:HandleFreq Para1 ist alteFreq wie 172.3800; Para2 ist neuerFreqName Kanal-A
FOR /F %%a in (Dir /b /A:-d audio__%1_*.wav) Do Call :RenameThem %%a %2 %%~ta
goto :eof
~~~ Ende der Schleife über alle Dateien mit Freq 172.3800...etc. im Namen
:RenameThem ...Para1 ist Filename; Para2 neuerFreqName
:: Parameter 3 ist das Dateidatum Para4 die Dateizeit
Call GetAllDateTimeInfos /s %3 %4
:: (alle Variablen sind gesetzt auf die Datei-Erstellungszeit)
:: Vorgabe :alter name: audio__172.3800_2006-01-01_16-18-50_to_2006-01-01_16-18-51.wav
:: .........neuer name: %Erstellungsdatum(JJJJ.MM.TT)%_%Erstellungszeit(HH:MM:SS)%_%Neuer Name für 172.3800(Kanal-A)%.wav
Ren %1 %JJ%%MM%%TT%_%HH%h%MM%m%SS%_%2
goto :eof
:: ---------snapp RenameWavs.bat
Geändert habe ich bei der Umnbenennerei die Doppelpunkte bei der Zeitangabe ("22:53:07") in "22h53m07", weil Doppelpunkte in Dateinamen nur Unbill provozieren.*gg
Pfade zu Deinen *.wav-Dateien, zur GetAllDateTimeInfos.bat und zur Set.cmd musst Du bitte anpassen.
HTH Biber
Hmmm, Pemue,
ich hab Deine Antwort grad gelesen und auch mal schnell durchprobiert - bei den CMD-Befehlen scheint erstmal kein von M$ mitgelieferter dabeizusein, den ich zur Übergabe/Anzeige der Sekunden von Erstellungs./Änderungsdatum überreden könnte.
Auch die Herumschrauberei an Einstellungen/Ländereinstellungen/Uhrzeit ändert nichts daran, auch wenn dort das Uhrzeit-Format mit Sekunden und meinetwegen Hundertsel-Sekunden eingestellt ist (am schnellsten überprüfbar bei den DIR-Ausgaben).
Lediglich bei der GUI-Anzeige im Explorer läßt sich M$ dazu überreden, unter "Eigenschaften" einer Datei auch die Sekundenwerte mit auszugeben.
Also... Alternativstrategien:
a) einer von uns treibt ein Konsolen-Utilitity auf, dass die Dateierstellungs-/Dateiänderungsdatumswerte mit Sekunden anzeigt--- selbst das M$-Filever-Utilitily macht das nicht *grummel*
b) einer von uns schreddert 5 Zeilen in Java-Script oder VB-Skript zusammen, die das tun
c) Wir übernehmen die Informationen aus dem alten Dateinamen, da stehen sie ja schon
d) Wir fügen zwei, drei Zeilen in den Batch ein zur Behandlung von Dateinamens-Kollisionen... dann heißt eben die zweite Datei (SülzDiBülz)A.wav und die dritte (SülzDiBülz)B.wav...
Mir egal, welche Variante...
Gruß Biber
P.S. Aber Kollisionen können doch nur auftreten, wenn diese Jingles auch in der gleichen Minute auf dem gleichen Kanal gesendet werden. Was sind das denn für *.wav's? Werbespots? Dann gibt es auch zentrale Sendelisten, in denen die Spots mit VON/BIS-Zeiten angekündigt/protokolliert werden...
ich hab Deine Antwort grad gelesen und auch mal schnell durchprobiert - bei den CMD-Befehlen scheint erstmal kein von M$ mitgelieferter dabeizusein, den ich zur Übergabe/Anzeige der Sekunden von Erstellungs./Änderungsdatum überreden könnte.
Auch die Herumschrauberei an Einstellungen/Ländereinstellungen/Uhrzeit ändert nichts daran, auch wenn dort das Uhrzeit-Format mit Sekunden und meinetwegen Hundertsel-Sekunden eingestellt ist (am schnellsten überprüfbar bei den DIR-Ausgaben).
Lediglich bei der GUI-Anzeige im Explorer läßt sich M$ dazu überreden, unter "Eigenschaften" einer Datei auch die Sekundenwerte mit auszugeben.
Also... Alternativstrategien:
a) einer von uns treibt ein Konsolen-Utilitity auf, dass die Dateierstellungs-/Dateiänderungsdatumswerte mit Sekunden anzeigt--- selbst das M$-Filever-Utilitily macht das nicht *grummel*
b) einer von uns schreddert 5 Zeilen in Java-Script oder VB-Skript zusammen, die das tun
c) Wir übernehmen die Informationen aus dem alten Dateinamen, da stehen sie ja schon
d) Wir fügen zwei, drei Zeilen in den Batch ein zur Behandlung von Dateinamens-Kollisionen... dann heißt eben die zweite Datei (SülzDiBülz)A.wav und die dritte (SülzDiBülz)B.wav...
Mir egal, welche Variante...
Gruß Biber
P.S. Aber Kollisionen können doch nur auftreten, wenn diese Jingles auch in der gleichen Minute auf dem gleichen Kanal gesendet werden. Was sind das denn für *.wav's? Werbespots? Dann gibt es auch zentrale Sendelisten, in denen die Spots mit VON/BIS-Zeiten angekündigt/protokolliert werden...
*lacht*
Welche Geduld, Pemue?
Bin ja froh, dass ich hier einen ruhigen Thread finde, wo nicht dauernd irgendwelche punkte-geierigen Chatter dazwischenquaken.. Die beharken sich inzwischen schon, wenn es um die beste Methode zur Trojanerentsorgung geht.. *kopfschüttel*
Ich nehme mir Deinen Ansatz mal mit und schau es mir in Ruhe an.
Wir bekommen das schon hin.
Aber jetzt mach ich erstmal etwas outside of forum
Bis dann
Biber
Welche Geduld, Pemue?
Bin ja froh, dass ich hier einen ruhigen Thread finde, wo nicht dauernd irgendwelche punkte-geierigen Chatter dazwischenquaken.. Die beharken sich inzwischen schon, wenn es um die beste Methode zur Trojanerentsorgung geht.. *kopfschüttel*
Ich nehme mir Deinen Ansatz mal mit und schau es mir in Ruhe an.
Wir bekommen das schon hin.
Aber jetzt mach ich erstmal etwas outside of forum
Bis dann
Biber
Moin Pemue,
ich versuch mal, die Mimik zum Rausfieseln der Uhrzeiten aus dem "alten" Dateinamen in einem Zwischenschritt herzuleiten, bevor ich das in den Batch einbaue.
Die Strategie war ja wie folgt:
a) aus einer Liste (set.txt) auslesen, welche Frequenzen wir überhaupt übersetzen können.
Den Job macht die Hauptschleife, die dann für alle Freqenzen die "Unterroutine ":Dateiname" ruft. Klappt.
b) diese ":Dateiname" ermittelt alle Dateinamen mit dieser Frequenz im Namen.Klappt auch.
c) Mit jedem einzelnen dieser Dateinamen soll die Umbenennerei stattfinden,
Das über ich jetzt mal am CMD-Prompt.
In der Klammer der FOR...IN..DO Anweisung steht jeweils der Dateiname ohne Extension,
z.B. der Name "audio__172.3800_2006-01-01_16-18-50_to_2006-01-01_16-18-51".
(ist eine Eingabezeile, auch wenn es in der Darstellung umgebrochen wird)
$cmd$ for /f "tokens=1-15 delims=-_" %a in
("audio__172.3800_2006-01-01_16-18-50_to_2006-01-01_16-18-51")
do @echo %a %b %c %d %e %f %g %h %i %j %k %l &m %n %o
(Output)
audio 172.3800 2006 01 01 16 18 50 to 2006 01 01 16 18 51
("audio"=%a;"172.3800"=%b; "2006"=%c"; "01"=%d "01"=%e; "16"=%f ...
...etc für 18 50 to 2006 01 01 16 18 51
Also, gute Nachricht: wenn ich den alten Dateinamen mit "-" und "_" als Trennzeichen zerlege, habe ich alle nötigen Informationen inclusive der Sekundenangabe.
Ich muss nur ein bisschen abzählen. Da ja nun sogar zwei Zeiten mit Sekundenangaben da sind, entscheide ich mich mal für die Ende-Zeit - kommt der Erstellungszeit am nächsten.
Wenn ich nur die brauche, sind das die letzten Tokens Ende-Datum "2006 01 01" und Ende-Zeit "16 18 51", also kann ich die Schleife vereinfachen.
$cmd$ for /f "tokens=10-15 delims=-_" %a in ("audio__172.3800_2006-01-01_16-18-50_to_2006-01-01_16-18-51") do @echo %a %b %c %d %e %f
(Output)
2006 01 01 16 18 51
Wenn die Kombination "Frequenz" und "Sende-Endezeitpunkt" bei Dir eindeutig ist, dann können wir jetzt die ursprüngliche Skizze ziemlich weit zusammendampfen, denn auch die Ermittlung des Dateidatums ist jetzt überflüssig.
Und dieses Problem kann auch nicht mehr auftreten: [Edit] ..dachte ich - s. unten [/Edit]
HTH Biber
ich versuch mal, die Mimik zum Rausfieseln der Uhrzeiten aus dem "alten" Dateinamen in einem Zwischenschritt herzuleiten, bevor ich das in den Batch einbaue.
Die Strategie war ja wie folgt:
a) aus einer Liste (set.txt) auslesen, welche Frequenzen wir überhaupt übersetzen können.
Den Job macht die Hauptschleife, die dann für alle Freqenzen die "Unterroutine ":Dateiname" ruft. Klappt.
b) diese ":Dateiname" ermittelt alle Dateinamen mit dieser Frequenz im Namen.Klappt auch.
c) Mit jedem einzelnen dieser Dateinamen soll die Umbenennerei stattfinden,
Das über ich jetzt mal am CMD-Prompt.
In der Klammer der FOR...IN..DO Anweisung steht jeweils der Dateiname ohne Extension,
z.B. der Name "audio__172.3800_2006-01-01_16-18-50_to_2006-01-01_16-18-51".
(ist eine Eingabezeile, auch wenn es in der Darstellung umgebrochen wird)
$cmd$ for /f "tokens=1-15 delims=-_" %a in
("audio__172.3800_2006-01-01_16-18-50_to_2006-01-01_16-18-51")
do @echo %a %b %c %d %e %f %g %h %i %j %k %l &m %n %o
(Output)
audio 172.3800 2006 01 01 16 18 50 to 2006 01 01 16 18 51
("audio"=%a;"172.3800"=%b; "2006"=%c"; "01"=%d "01"=%e; "16"=%f ...
...etc für 18 50 to 2006 01 01 16 18 51
Also, gute Nachricht: wenn ich den alten Dateinamen mit "-" und "_" als Trennzeichen zerlege, habe ich alle nötigen Informationen inclusive der Sekundenangabe.
Ich muss nur ein bisschen abzählen. Da ja nun sogar zwei Zeiten mit Sekundenangaben da sind, entscheide ich mich mal für die Ende-Zeit - kommt der Erstellungszeit am nächsten.
Wenn ich nur die brauche, sind das die letzten Tokens Ende-Datum "2006 01 01" und Ende-Zeit "16 18 51", also kann ich die Schleife vereinfachen.
$cmd$ for /f "tokens=10-15 delims=-_" %a in ("audio__172.3800_2006-01-01_16-18-50_to_2006-01-01_16-18-51") do @echo %a %b %c %d %e %f
(Output)
2006 01 01 16 18 51
Wenn die Kombination "Frequenz" und "Sende-Endezeitpunkt" bei Dir eindeutig ist, dann können wir jetzt die ursprüngliche Skizze ziemlich weit zusammendampfen, denn auch die Ermittlung des Dateidatums ist jetzt überflüssig.
:: -----snipp RenameWavs2.bat Ungetestete Skizze!!
@echo off & setlocal
Pushd D:\server\rec\test
for /f "tokens=1,2 delims= " %%i in (D:\batch\set.txt) do call :DateiName %%i %%j
PopD
goto :eof
~~~~Ende der Schleife über alle 120 Frequenzen; Ende des Batches
:DateiName ...übergibt je EINEN gefundenen Dateinamen OHNE .wav
set "Frequenz=%1" && Rem Nur wegen der Lesbarkeit gesetzt
set "Kanal=%2" && Rem Nur wegen der Lesbarkeit gesetzt; kann als %2 übergeben werden
FOR /F %%a in ('Dir /b /A:-d audio__%Frequenz%_*.wav') Do Call :Datum %%~na %2
goto :eof
~~~ Ende der Schleife über alle Dateien mit Freq 172.3800...etc. im Namen
:Datum ACHTUNG Para1 (orgDatei) kommt jetzt OHNE Extension an
:: <s>set "OrgDatei=%1</s> %Kanal% ist auch als Para2 verfügbar.
for /f "tokens=10-15 delims=-_" %%a in ("%1") do (
ren %1.wav %%a-%%b-%%c_%%d_%%e_%%f_%Kanal%.wav
)
goto :eof
:: RenameWavs2.bat---------------------------
Und dieses Problem kann auch nicht mehr auftreten: [Edit] ..dachte ich - s. unten [/Edit]
und noch ne zweite schwäche:
wenn %172.3800% im verzeichnis grad nicht existiert (weil vielleicht schon umbenannt)
gibts immer wieder die schöne meldung: ...das system kann die datei nicht finden.
hilfreich wäre eine @if exist (%172.3800%) schleife.
wenn %172.3800% im verzeichnis grad nicht existiert (weil vielleicht schon umbenannt)
gibts immer wieder die schöne meldung: ...das system kann die datei nicht finden.
hilfreich wäre eine @if exist (%172.3800%) schleife.
HTH Biber
Ach so, Pemue,
sorry, hatte ich ganz vergessen... wenn es weiter nix ist...
Also, da würde ich hier in diesem Block ansetzen:
...
DateiName ...übergibt je EINEN gefundenen Dateinamen OHNE .wav
if not exist audio__%1_*.wav goto :eof
set "Frequenz=%1" && Rem Nur wegen der Lesbarkeit gesetzt
set "Kanal=%2" && Rem Nur wegen der Lesbarkeit gesetzt; kann als %2 übergeben werden
FOR /F %%a in ('Dir /b /A:-d audio__%Frequenz%_*.wav') Do Call :Datum %%~na %2
goto :eof
...
Geht am Schnellsten... wenn es Dir allerdings woanders lieber ist...?? *fragend guckt*
HTH Biber
sorry, hatte ich ganz vergessen... wenn es weiter nix ist...
Also, da würde ich hier in diesem Block ansetzen:
...
DateiName ...übergibt je EINEN gefundenen Dateinamen OHNE .wav
if not exist audio__%1_*.wav goto :eof
set "Frequenz=%1" && Rem Nur wegen der Lesbarkeit gesetzt
set "Kanal=%2" && Rem Nur wegen der Lesbarkeit gesetzt; kann als %2 übergeben werden
FOR /F %%a in ('Dir /b /A:-d audio__%Frequenz%_*.wav') Do Call :Datum %%~na %2
goto :eof
...
Geht am Schnellsten... wenn es Dir allerdings woanders lieber ist...?? *fragend guckt*
HTH Biber