zunaras
Goto Top

Aufgabe ausführen, wenn Datei-Änderungsdatum älter als x Tage

Schönen guten Tag!

Über eine Windows Aufgabe soll in regelmäßigen Abständen eine Batch gestartet werden -> Acronis Backup Task
Darin wird im Netzwerk regelmäßig nach einer NAS gepingt, die leider nicht immer erreichbar ist, und wenn über die IP gefunden, das Programm gestartet. Das macht er auch schon ohne Probleme.
Das Ziellaufwerk hat über meinen normalen Benutzer Lese und Schreibsperre. In ATI ist dafür ein anderer Benutzer hinterlegt.

Durch die Sperre habe ich mir überlegt, auf C: eine kleine Logdatei zu schreiben. Dessen Änderungsdatum möchte ich für eine Abfrage nutzen.
Ich möchte das Backup in der Aufgabe nämlich nicht alle 2 Stunden starten, sondern nur, wenn des Änderungsdatum älter als X Stunden ist. 12, 24, 36 zum Beispiel.


Der bisherige Code:
for /f %%a in ('powershell -Command "Get-Date -format yyyy.MM.dd_HH.mm.ss"') do set logtime=%%a  
.
. Ping Abfrage dazwischen
.
echo TrueImageTasks werden ausgefuehrt
:TrueImageTasks
:System
for /f "delims=" %%i in ('dir c:\pflege\Acronis_System.log /s /b /a-d') do set file_date=%%~ti  
echo %file_date%
"C:\Program Files (x86)\Common Files\Acronis\TrueImageHome\TrueImageHomeNotify.exe" /script:"3C11DD90-8D9C-4CF2-9EBA-AD7C32294D2B"  
:: Datum und Uhrzeit in Log anhaengen
echo %logtime% >> c:\pflege\Acronis_System.log

Nun komme ich nicht weiter. Kann man %logtime% und %file_date% irgendwie dazu verwenden, die Zeitdifferenz zu errechnen?

Viele Grüße

Content-ID: 606478

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

Ausgedruckt am: 19.11.2024 um 11:11 Uhr

SeaStorm
SeaStorm 21.09.2020 aktualisiert um 13:12:07 Uhr
Goto Top
Hi

warum machst du das nicht alles in Powershell? Ist viel einfacher so
$logfile = "c:\pflege\Acronis_System.log"  
$olderthan = -12
if (Test-Path $logfile -OlderThan (Get-Date).AddHours($Olderthan)) {
    Write-Host MachBackup
}
Zunaras
Zunaras 21.09.2020 um 12:50:47 Uhr
Goto Top
Moin!

Weil Powershell mich nicht mag, oder eher umgekehrt.

Alles sehr holprig und Zeitaufwendig für mich.

Ich habs mit PS versucht.
ATI muss als Admin gestartet werden. Ich habe eine Anleitung gefunden, mit der ich das Skript per Rechtsklick-Kontextmanü als Admin starten kann.
Das Skript läuft sofort bis zum Ende durch ohne auf das ATI-Ende zu warten. Ich habe mit WaitForExit probiert.

$logfile = "c:\pflege\Acronis_System.log"  
$olderthan = -12
if (Test-Path $logfile -OlderThan (Get-Date).AddHours($Olderthan)) {
    Write-Host "MachBackup"  
}
$Cmd = 'C:\Program Files (x86)\Common Files\Acronis\TrueImageHome\TrueImageHomeNotify.exe'  
&$Cmd --% /script:"EE6E52AC-6ED0-4D74-885F-1F8E0EB9DF35"  
#$Cmd.WaitForExit()

(Get-Date).ToString(„dd.MM.yyyy_HH:mm“) | out-file "$logfile"  

cmd /c pause
SeaStorm
SeaStorm 21.09.2020 um 13:19:29 Uhr
Goto Top
$Cmd = "C:\Program Files (x86)\Common Files\Acronis\TrueImageHome\TrueImageHomeNotify.exe"  
$args = '/script:"EE6E52AC-6ED0-4D74-885F-1F8E0EB9DF35"'  
Start-Process $Cmd -ArgumentList $args -Wait
Zunaras
Zunaras 21.09.2020 aktualisiert um 15:27:06 Uhr
Goto Top
Oh Vielen Dank!

Mit dem "älter als" hab ich noch meine Probleme. Die Backups werden ausgeführt, obwohl zeitlich aktuelle Logs vorhanden sind.
Wie kann ich nach der Datumsabfrage den nachfolgenden ATI Task samt (Get-Date)..... überspringen zum nächsten direkt darunter liegenden Abschnitt? Sprungpunkte gibt es hier ja nicht mehr.


EDIT
Ich habe eine Lösung gefunden. Und zwar doch wieder mit Batch. Statt eine Abfrage des Änderungsdatums zu machen, lösche ich einfach das Log, wenn älter als.
forfiles /p %logpfad% /s /m *.* /d -7 /c "cmd /c del @path"  
Wenn die Datei nicht vorhanden ist, wird das Backup durchgeführt.

Damit kommt ich besser klar. face-smile

Viele Grüße