Errorsmith 10 Geschrieben 21. November 2008 Melden Teilen Geschrieben 21. November 2008 Moin! Ich hab folgendes Problem. Ein kleines Programm, das regelmäßig alle fünf Minuten eine Datei mit Ergebnissen erstellt, legt diese leider recht unsortiert ab. (Info über Datenquelle und eine laufende Nummer als Dateiname) Ich möchte nun eine CMD schreiben, bei der die Dateien umbenannt werden. Der neue Dateiname soll das Erstelldatum der Datei beeinhalten. Die ursprünglichen Benennungen müssen allerdings auch erhalten bleiben. Aus diesem da: Name Datum ------------------------------------------------------- xyz.dat 12.11.2008 12:00 aaa.dat 12.11.2008 12:05 abc.dat 12.11.2008 12:10 soll werden: 20081112-1200-xyz.dat 12.11.2008 12:00 20081112-1205-aaa.dat 12.11.2008 12:05 20081112-1210-abc.dat 12.11.2008 12:10 Leider hab ich's nicht so mit der CMD und würde mich über ein wenig Hilfe freuen. Ich hab in der Suche einige Sachen gefunden, die arbeiteten aber scheinbar mit der Powershell, die steht mir nicht zur Verfügung. Grüße, Errorsmith Zitieren Link zu diesem Kommentar
Biber 10 Geschrieben 22. November 2008 Melden Teilen Geschrieben 22. November 2008 Moin Errorsmith, ich möchte hier nur den handwerklichen Teil kurz abhandeln. Den konzeptionellen solltest Du noch mal gesondert für Dich klären. Umbenennen von Dateien auf yyyymmdd-hhmm-dateiname.ext: for %f in (*.*) do @for /f "tokens=1-5 delims=:. " %i in ("%~tf") do @echo Ren "%f" "20%k%j%i-%l%m_%~nxf"[/Code] (Proof-of-Concept-Skizze am Cmd-Prompt; im Batch alle %-Zeichen durch %% ersetzen.) Jetzt das ABER. Du willst ja (vermutlich) nur die Dateien umbenennen, die Datum/Uhrzeit noch nicht im Namen haben. Wenn Du aber so einenEinzeiler alle 10 Minuten über Taskplaner oder whatever laufen lässt, werden ja auch die Dateien der letzten, vorletzten etc Umbenamsungsrunde noch mal umbenannt. Ich würde also nahelegen - entweder die Dateien gleich bei der Umbenennung auch inein anderes Verzeichnis zu MOVEn - oder aber den Wildcard-Filter statt auf *.* nur auf die Noch-Nicht-Umbenannten zu legen (z.B ...(sys.* aaa.* bbb.*) , falls Du die weißt - oder aber for dem Umbenennen zu prüfen, ob der Dateiname mit schon mit "2008" beginnt oder ähnliches. Grüße Biber Zitieren Link zu diesem Kommentar
Ja_mei 10 Geschrieben 22. November 2008 Melden Teilen Geschrieben 22. November 2008 Servus, ich nutze das hier bei mir um aus der die Backuplog.txt einen anderen Namen mit Zeitstempel zu geben. rem Zeitstempel erzeugen for /f "tokens=1-4 delims=. " %%i in ("%date%") do ( set day=%%i set month=%%j set year=%%k ) for /f "tokens=1-4 delims=.:, " %%i in ("%time%") do ( set hour=%%i set minute=%%j set second=%%k set hundredth=%%l ) rem Log-Datei mit Zeitstempel umbenennen ren D:\Backup\BackupLog.txt FullBackup-%year%-%month%-%day%-%hour%-%minute%.txt rem Zeitstempel erzeugen for /f "tokens=1-4 delims=. " %%i in ("%date%") do ( set day=%%i set month=%%j set year=%%k ) for /f "tokens=1-4 delims=.:, " %%i in ("%time%") do ( set hour=%%i set minute=%%j set second=%%k set hundredth=%%l ) rem Log-Datei mit Zeitstempel umbenennen ren D:\Backup\BackupLog.txt FullBackup-%year%-%month%-%day%-%hour%-%minute%.txt Zitieren Link zu diesem Kommentar
HerrPi 10 Geschrieben 16. April 2010 Melden Teilen Geschrieben 16. April 2010 Die Beiträge sind schon etwas her, aber ich möchte mich darauf beziehen. Ich versuche, per Shellskript beliebige Dateien umzubenennen, sodass diese ihr Erstellungsdatum im Dateinamen haben. Mit FOR %%V IN (%1) DO FOR /F "tokens=1-5 delims=.: " %%J IN ("%%~tV") DO @ECHO Rename "%%V" %%L-%%K-%%J - %%M-%%N%%~xV komme ich schon sehr weit, jedoch fehlen mir die Sekunden noch! Wie komme ich an die ran? Ich habe eine Erweiterung der Tokens (1-6) usw. schon versucht, aber nichts scheint zu helfen. Weiß jemand Rat? Zitieren Link zu diesem Kommentar
Biber 10 Geschrieben 19. April 2010 Melden Teilen Geschrieben 19. April 2010 (bearbeitet) Moin HerrPi, die gute Nachricht zuerst: du hast eigentlich keinen Denkfehler in deinem Schnipsel. Schlechte Nachricht: die Variablenableitung mit [%]%~t kann keine Sekunden liefern. Kurze Simulation am CMD-Prompt >for %i in (user*.txt) do @echo %i %~tiUserids.txt 13.04.07 16:54userlist.txt 14.05.08 07:07[/Code] ---> die Datum/Zeit-Auflösung geht maximal runter auf Minutengenauigkeit. Workaround a) [i][Recommended][/i] Änderung des Plans - Prüfen, ob eine Umbenennung auf Namen mit Sekundengenauigkeit ganz ganz wirklich ganz ganz unbedingt erforderlich ist. b) Wenn es unausweichlich erscheint, dann mittels eines JScript/VBScript-Schnipselchens nach der (Datei-)Uhrzeit fragen und übernehmen. Möglichkeit b) geht also auch durchaus - ist aber IMHO im Regelfall überkandidelte Effekthascherei. Grüße Biber bearbeitet 19. April 2010 von Biber Tippfehlerkorrektur Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 19. April 2010 Melden Teilen Geschrieben 19. April 2010 Ist Powershell verfügbar? Zitieren Link zu diesem Kommentar
HerrPi 10 Geschrieben 14. September 2010 Melden Teilen Geschrieben 14. September 2010 Sorry, diese Antwort von mir kommt wirklich spät! :-) Aber ja, Powershell ist verfügbar! Geht damit was? Zitieren Link zu diesem Kommentar
Dukel 454 Geschrieben 14. September 2010 Melden Teilen Geschrieben 14. September 2010 Ja. z.B. (kann man noch ausformulieren oder aufhübschen) $datei = "xyz.dat" $date = get-date (Get-ChildItem .\xyz.dat).lastwritetime -f yyyyMMdd $time = get-date (Get-ChildItem .\xyz.dat).lastwritetime -f hhmm $file = (Get-Item .\xyz.dat).Name move-item $datei "$date-$time-$file" Off-Topic: An guten Tagen mach ich darauf einen Einzeiler. Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 2. November 2017 Melden Teilen Geschrieben 2. November 2017 Dieser Thread ist 7 Jahre alt! Man kapert keine alten Threads. Das hat Dir auch die rote Warnung klar gemacht. Bitte eröffne für deine Thematik einen eigenen Thread. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.