andi0972
Goto Top

Dateien umbenennen abhängig vom Erstellungsdatum

Hallo zusammen,

ich habe folgendes Problem, ich möchte gerne Dateien z.B. Uebergabe_02_00007985_20070925100505.000 in z.B. Uebergabe_02_00007985_20070925100505.002 umbenennen.
Diese werden von einem anderen Prozess ertstellt und es kann sei dass diese noch im Zugriff sind wenn der Batch läuft den ich momentan laufen habe.
Deswegen dürfen nur Dateien umbenannt werden die älter als 5 Minuten sind.
Der Dateiname baut sich immer uebergabe_02_fortlaufendeNummer_JahrMonatTagUhrzeit.000 auf.
Es soll auch nur die Dateiendung in 002 umbenannt werden, dies ist dann für die weitere Verarbeitung.
Der Dateiname selbst soll gleich bleiben.

Kann hier jemand weiterhelfen?


Vielen Dank

Content-Key: 69477

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

Ausgedruckt am: 28.03.2024 um 10:03 Uhr

Mitglied: bastla
bastla 25.09.2007 um 17:52:53 Uhr
Goto Top
Hallo Andi0972 und willkommen im Forum!

Du könntest es mit der folgenden Batch/VBScript-Kombination versuchen:
@echo off & setlocal
set /a MindestAlter=5
set "D=D:\Daten\*.000"  
set "New=*.002"  

set "AM=%temp%\AgeInMinutes.vbs"  
echo A=DateDiff("n", CreateObject("Scripting.FileSystemObject").GetFile(WScript.Arguments(0)).DateLastModified, Now):If A^>100000 Then WScript.Echo 100000 Else WScript.Echo A>"%AM%"  

for %%i in ("%D%") do for /f %%a in ('cscript //nologo "%AM%" "%%i"') do set /a Alter=%%a & call :ProcessFile "%%i"  
del "%AM%"  
goto :eof

:ProcessFile
if %Alter% leq %MindestAlter% goto :eof
ren %1 "%New%"  
Da die Altersberechnung (zumindest unter Berücksichtigung eines Tages-/Monats-/Jahreswechsels) in Batch etwas aufwändig ist, erledigt der VBS-Teil die Ermittlung des Alters in Minuten, wobei eine (willkürliche) Begrenzung dafür sorgt, dass das Maximalalter mit 100000 Minuten angegeben wird.

Die angegebenen Quelldateien ("D:\Daten\*.000") werden einzeln untersucht und, falls deren Alter über dem Mindestalter (angegeben in Minuten) liegt, entsprechend der Vorgabe umbenannt.

Grüße
bastla
Mitglied: andi0972
andi0972 26.09.2007 um 13:24:19 Uhr
Goto Top
Vielen Dank für Deine Hilfe.
Mein Kollege und ich haben es mit einem selbst erstelltem Tool hin bekommen.

Aber trotzdem vielen Dank für Deine Hilfe.
Mitglied: Biber
Biber 26.09.2007 um 18:41:37 Uhr
Goto Top
Ja, wie, andi0972,
Mein Kollege und ich haben es mit einem selbst erstelltem Tool hin bekommen.
... und weiter?

Da gratuliere ich doch erstmal. Aber dann möchte ich schon fragen:
Wollt ihr es zuerst dem Nobelpreiskommittee in Stockholm vorlegen oder dürfen wir als fachkundige Forums-MitleserInnen auch mal einen Blick drauf werfen?

Vielleicht ist ja die Lösung auch hilfreich für andere....
Das Problem "Dateien umbenennen abhängig vom Erstellungsdatum" jedenfalls tritt in diesem Forum schon hin und wieder mal auf.

Meine Bitte:
Auch wenn ihr selbst eine Lösung gefunden hat, lasst den Rest des Forums doch bitte daran teilhaben.
Falls ich mal eine Idee oder einen Lösungsansatz haben sollte, werde ich mich im Gegenzug dann auch damit einbringen. face-wink

Danke
Biber
Mitglied: andi0972
andi0972 27.09.2007 um 12:04:53 Uhr
Goto Top
Hallo,

sorry hatte vergessen zu erwähnen dass wir es nicht mit einem Batch sondern mit VFP gelöst haben. Hier dazu der Code:
C_FILE_EXT_OLD = 000

C_FILE_EXT_NEW = UPL

C_TIME_DIF_SEC = 300

 

gnDbcnumber = ADIR(gaDatabase, ('*.' + C_FILE_EXT_OLD) )   

IF gnDbcnumber > 0

      FOR nCount = 1 TO gnDbcnumber  

         C_FILE_NAME_OLD = ALLTRIM(gaDatabase(nCount,1))

         C_FILE_DATE_OLD = DTOC(gaDatabase(nCount,3))

         C_FILE_TIME_OLD = gaDatabase(nCount,4)

         C_FILE_DATI_OLD = C_FILE_DATE_OLD + ' ' + C_FILE_TIME_OLD  

         N_ZEIT_DIF = DATETIME() - CTOT(C_FILE_DATI_OLD)

         IF N_ZEIT_DIF > VAL(C_TIME_DIF_SEC)

               C_FILE_NAME_ALT_OHNE_EXT = SUBSTR(C_FILE_NAME_OLD,1,LEN(C_FILE_NAME_OLD)-3)

               C_FILE_NAME_NEU = C_FILE_NAME_ALT_OHNE_EXT + C_FILE_EXT_NEW

               RENAME (C_FILE_NAME_OLD) TO (C_FILE_NAME_NEU)

         ENDIF          

      ENDFOR

ENDIF 

Viele Grüße
Mitglied: Biber
Biber 27.09.2007 um 13:30:01 Uhr
Goto Top
Moin andi0972,

Danke Dir fürs Posten.
Habe Deinen Code als formatiert.

Jetzt schließe ich den Beitrag auch.

Grüße
Biber