Zum Inhalt wechseln


Foto

Dateien regelmaessig umbenennen mit Erstellungsdatum


  • Bitte melde dich an um zu Antworten
8 Antworten in diesem Thema

#1 Errorsmith

Errorsmith

    Newbie

  • 1 Beiträge

 

Geschrieben 21. November 2008 - 09:28

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

#2 Biber

Biber

    Junior Member

  • 97 Beiträge

 

Geschrieben 22. November 2008 - 12:16

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"
(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

#3 Ja_mei

Ja_mei

    Junior Member

  • 81 Beiträge

 

Geschrieben 22. November 2008 - 12:29

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
MFG
Ja_mei, der aus dem Chiemgau.

Unmögliches wird sofort erledigt, Wundern dauern etwas länger.

MCSA Messaging

#4 HerrPi

HerrPi

    Newbie

  • 2 Beiträge

 

Geschrieben 16. April 2010 - 16:33

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?

#5 Biber

Biber

    Junior Member

  • 97 Beiträge

 

Geschrieben 19. April 2010 - 04:50

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 %~ti
Userids.txt 13.04.07 16:54
userlist.txt 14.05.08 07:07
---> die Datum/Zeit-Auflösung geht maximal runter auf Minutengenauigkeit.

Workaround
a) [Recommended] Ä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 von Biber, 19. April 2010 - 06:04.
Tippfehlerkorrektur


#6 Dukel

Dukel

    Board Veteran

  • 9.298 Beiträge

 

Geschrieben 19. April 2010 - 05:17

Ist Powershell verfügbar?

#7 HerrPi

HerrPi

    Newbie

  • 2 Beiträge

 

Geschrieben 14. September 2010 - 19:59

Sorry, diese Antwort von mir kommt wirklich spät! :-)

Aber ja, Powershell ist verfügbar!
Geht damit was?

#8 Dukel

Dukel

    Board Veteran

  • 9.298 Beiträge

 

Geschrieben 14. September 2010 - 20:20

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.


#9 MurdocX

MurdocX

    Board Veteran

  • 575 Beiträge

 

Geschrieben 02. November 2017 - 16:27

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.


Mit freundlicher Unterstützung
Jan