Jump to content

Dateien regelmaessig umbenennen mit Erstellungsdatum


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

Empfohlene Beiträge

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar
  • 1 Jahr später...

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?

Link zu diesem Kommentar

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
[/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 von Biber
Tippfehlerkorrektur
Link zu diesem Kommentar
  • 4 Monate später...

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.

Link zu diesem Kommentar
  • 7 Jahre später...
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...