Hernoem bestand na 2u

Status
Niet open voor verdere reacties.

Crizke

Gebruiker
Lid geworden
11 feb 2013
Berichten
51
Hoi

Ik zou graag de code willen weten die ik op de plaats van de ... moet zetten om een bestand automatisch aan te passen.

De bedoeling van dit programma is een bestand hernoemen. Dit doet het al perfect.
Maar ik zou het graag willen automatiseren.
Als het bestand (hier "toktok.txt") ouder dan 2u is (nu is het 10u40; en om 12u41 zou het dus moeten aanpassen), zou ik willen dat het bat-bestandje de bestandsnaam vh tekstbestand hernoemt. Als dat niet zo het geval is, moet het niets doen.

Code:
cls
Set WorkPath=D:\Temp

SET SCHIJF=D:

cls
CD\
cd %WorkPath%

SETLOCAL enabledelayedexpansion

  set hr=%time:~0,2%
  if "%hr:~0,1%" equ " " set hr=0%hr:~1,1%

If ... 

RENAME toktok.txt toktok(%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%h-%time:~3,2%m-%time:~6,2%).txt

Pause

Kan iemand me verder helpen?

Mvg C
 
Beetje afhankelijk van hoe exact de timing moet zijn. Windows heeft standaard ondersteuning voor het periodiek uitvoeren van opdrachten: de "task scheduler" (te vinden onder "administrative tools")
 
Ja dat weet ik. Maar ik kan dat niet instellen om de 2u bv, want mss is mijn bestand nog geen 2uur oud.
Het zou echt in die bat file moeten staan... :o

Ik kan mss verwijzen naar de datum en tijd die ik via een "echo" in het txt-bestand staan. Het wordt er automatisch ingezet als het gekoppelde programma geopend wordt. Dus bij openen van een programma, krijg ik in dat tekstbestand de datum en tijd te zien.
Ik probeer nu dus een vergelijking tussen de systeemtijd en de laatst aangepaste tijd te maken, maar is wat moeilijker dan ik dacht.
Misschien met een FOR werken en dan de DateAdd of TimeAdd verder uitwerken???
 
Ik begrijp je probleem. vandaar dat ik ook vroeg hoe nauwkeurig het moet zijn. je kunt je bat bijvoorbeeld elk uur laten draaien. en vervolgens je bat afstellen op de timestamp van de file. je file wordt dan gerenamed tussen 2uur en 2u59m. Eventueel kun je de interval nog wat kleiner maken om het nauwkeuriger te krijgen.
 
Code:
cls
Set WorkPath=C:\Temp

SET SCHIJF=C:

cls
CD\
cd %WorkPath%

SETLOCAL enabledelayedexpansion

  set hr=%time:~0,2%
  if "%hr:~0,1%" equ " " set hr=0%hr:~1,1%

  set filename=toktok.txt

rem extract current date and time
for /f "tokens=1-5 delims=.:, " %%a in ("%date% %time%") do (
  set day=%%a&set mon=%%b&set yr=%%c&set hr=%%d&set min=%%e
)

rem extract file date and time
for /f "tokens=1-5 delims=.:, " %%a in ('"dir %filename%|find "%filename%""') do (
  set fday=%%a&set fmon=%%b&set fyr=%%c&set fhr=%%d&set fmin=%%e
)

rem calculate age of file (in minutes)
set /a "age=((hr*60+min)-(fhr*60+fmin)+(24*60))%%(24*60)"
set /a "max=2*60"

if %age% geq %max% echo.file is older than 2 hours
RENAME toktok*.txt toktok(%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%h-%time:~3,2%m-%time:~6,2%).txt

Pause

Deze code geeft wel wat foutmeldingen (oa bij het zetten van de datum en tijd), ik ben aan het kijken om die eruit te halen...
Of hoe zou ik daar dan het beste aan beginnen aan die Timestamp?
 
Laatst bewerkt:
Code:
cls
Set WorkPath=C:\Temp

SET SCHIJF=C:

cls
CD\
cd %WorkPath%

SETLOCAL enabledelayedexpansion

  set hr=%time:~0,2%
  if "%hr:~0,1%" equ " " set hr=0%hr:~1,1%

  set filename=toktok.txt

rem extract current date and time
for /f "tokens=1-5 delims=.:, " %%a in ("%date% %time%") do (
  set yr=%date:~-4,4%&set day=%date:~-10,2%&set mon=%date:~-7,2%&set hr=%%c&set min=%%d
)

rem extract file date and time
for /f "tokens=1-5 delims=.:, " %%a in ('"dir %WorkPath%\%filename%|find "%filename%""') do (
  set fyr=%date:~-4,4%&set fday=%date:~-10,2%&set fmon=%date:~-7,2%&set fhr=%%c&set fmin=%%d
)

rem calculate age of file (in minutes)
set /a "age=((hr*60+min)-(fhr*60+fmin)+(24*60))%%(24*60)"
set /a "max=2*60"

if %age% geq %max% echo.file is older than 2 hours
RENAME toktok*.txt toktok(%date:~-4,4%%date:~-10,2%%date:~-7,2%_%hr%h-%time:~3,2%m-%time:~6,2%).txt

Pause

Dit is de code aangepast... Nog zit er iets in waar ik niet uitgeraak... :o
Ik zit dus echt vast om de aangemaakte datum en tijd van het bestand te vinden...
 
Laatst bewerkt:
je kunt toch last modified gebruiken of zit daar het probleem niet?

Code:
@echo off
FOR %%? IN (etest.vbs) DO (
	ECHO Last-Modified Date   : %%~t?
)
 
Ik gebruik dit om de datum en tijd te weten te komen dat het bestand aangemaakt is...

Code:
FOR %%v IN (toktok*.txt) DO ( 
  SET datetime=%%~tv
  SET fdate=!datetime:~0,10!
  SET ftime=!datetime:~11,8!
  SET fhr=!ftime:~0,2!
  SET fmin=!ftime:~3,2!
)

En dan gebruik ik een soort van som om het verschil tussen huidige tijd en tijd dat het bestand aangemaakt werd te vinden...

Code:
rem calculate age of file (in minutes)
REM set /a age=(((hr*60)+min)-((fhr*60)+fmin))
set /a age1=(hr*60)+min
set /a age2=(fhr*60)+fmin
Set /a age3=%age1%-%age2%
set /a max=2*60

Ik zit dus weer iets verder, maar nog niet ver genoeg...
 
ik moet eerlijk bekennen, voor dit soort complexiteit grijp ik persoonlijk altijd naar VBS. Mijn batch kennis is helaas te beperkt, denk ik
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan