darkzonesd
Goto Top

Last Write Time in Batch überprüfen

Hallo zusammen und ein frohes neues Jahr,

ich schreibe gerade eine .bat die alle 30 Minuten in einer Task ausgeführt werden soll, falls die LastWriteTime in den Unterordnern des $Path -30 Minuten beträgt, soll die .bat eine E-Mail senden. Das E-Mail senden an sich funktioniert super, nur leider kriege ich die Bedingung mit der Last Write Time nicht hin.

Ich habe das schonmal in Powershell geschrieben, bräuchte aber leider eine .bat da diese Dateien auf Windows XP Rechnern ausgeführt werden sollen. Da Ich ungern händisch Powershell auf den vielen alten Rechnern installieren würde.

In Powershell sah das so aus:

	$File = Get-ChildItem $Path | Where { $_.LastWriteTime -ge [datetime]::Now.AddMinutes(-30) }
	$Successful = Get-Content -Path $Path | Select-String -Pattern "Verify completed"  
	$Failed = (Get-Content $Path) -eq $Null
	
	If($Failed -and $File)
		{	$SMTPBody = "Backup failed, Log File is empty `n`n"  
			$File | ForEach { $SMTPBody += "$($_.FullName)`n" }  
			Send-MailMessage @SMTPMessageF -Body $SMTPBody

		}	

        If ($Successful -and $File)
		{	$SMTPBody = "$Log"  
			$File | ForEach { $SMTPBody += "$($_.FullName)`n" }  
			Send-MailMessage @SMTPMessageS -Body $SMTPBody
	
		} 

Nun bräuchte ich die $File Bedingung in einer .bat (habe die $Successful und $Failed Bedingungen hinzugefügt der Übersicht und Vollständigkeit halber)

Ich freue mich auf eure Ansätze!

Vielen dank.

Flo

Content-ID: 5186262079

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

Ausgedruckt am: 04.12.2024 um 19:12 Uhr

3063370895
3063370895 02.01.2023 aktualisiert um 15:21:28 Uhr
Goto Top
Hi,

Zitat von @DarkZoneSD:
Windows XP

Mein Beileid.

Kein AD vorhanden? Oder irgendeine Möglichkeit Powershell zentral zu installieren?
DarkZoneSD
DarkZoneSD 02.01.2023 um 15:24:22 Uhr
Goto Top
Hi,

die Rechner sind Teils Teils in der Domäne.. ( Frag lieber nicht )

deshalb am besten eine Batch-Komplettlösung ^^
5175293307
Lösung 5175293307 02.01.2023 aktualisiert um 16:47:40 Uhr
Goto Top
Nimm doch VBS.

Const FOLDER = "E:\Data"  
Set fso = CreateObject("Scripting.FileSystemObject")  
For Each file In fso.GetFolder(FOLDER).Files
	If file.DateLastModified > DateAdd("n",-30,Now) Then  
                ' do something here  
		MsgBox file.Path
	End If
Next

Gruß Wurstel.
DarkZoneSD
DarkZoneSD 03.01.2023 um 08:19:15 Uhr
Goto Top
Guten Morgen,

ich bin leider total unbegabt was VBS angeht, hab es noch nie benutzt. Ich versuch mich da mal rein zu arbeiten.

Dankeschön!
DarkZoneSD
DarkZoneSD 05.01.2023 um 12:34:07 Uhr
Goto Top
Ich habe mal ChatPGT gefragt und er gibt mir folgende antwort falls es jemand benötigt!

@echo off

setlocal enabledelayedexpansion

rem Set the path to the directory
set dirpath=C:\myfolder

rem Set the current time
set currenttime=%time%

rem Set the time limit (30 minutes ago)
set timelimit=%time: =0%
set /a "timelimit=%timelimit:~0,2%-1"  
if %timelimit% lss 10 set timelimit=0%timelimit%
set timelimit=%timelimit%:%time:~3,2%

rem List the files in the directory, and store the output in a temporary file
dir %dirpath% /T:W > %temp%\filelist.tmp

rem Read the temporary file line by line
for /f "tokens=*" %%A in (%temp%\filelist.tmp) do (  
   rem Check if the file modification time is within the last 30 minutes
   set filetime=%%A
   set filetime=!filetime:~0,5!
   if !filetime! geq !timelimit! (
      rem The file modification time is within the last 30 minutes
      rem Add your commands here
   )
)

rem Delete the temporary file
del %temp%\filelist.tmp
This script will do the following:

Set the path to the directory that you want to check (C:\myfolder).
Set the current time.
Calculate the time limit (30 minutes ago) and store it in the timelimit variable.
Use the dir command to list the files in the C:\myfolder directory, and save the output to a temporary file.
Use the for loop to read the temporary file line by line.
For each line in the file, extract the file modification time and store it in the filetime variable.
Use the if statement to compare the filetime variable with the timelimit variable. If filetime is greater than or equal to timelimit, it means that the file modification time is within the last 30 minutes.
If the file modification time is within the last 30 minutes, you can add your commands inside the if statement. These commands will be executed only for the files that meet the condition.
After the for loop has finished processing all the lines in the file, the script will delete the temporary file.

Lustig was dadurch alles möglich ist.

Grüße


Flo
3063370895
3063370895 05.01.2023 um 13:17:52 Uhr
Goto Top
ChatGPT ist echt der Wahnsinn. Funktioniert es auch einwandfrei?
5175293307
5175293307 05.01.2023 aktualisiert um 13:55:33 Uhr
Goto Top
Nee, da ist einiges nicht stimmig, fängt schon an das es nicht 30 Minuten sind sondern eine Stunde, über den falschen Vergleich von Zeit mit Dateidatum anstatt Zeit mit Dateizeit .....

Never trust a robot!! Erst recht nicht beim coden.
DarkZoneSD
DarkZoneSD 13.01.2023 um 23:48:20 Uhr
Goto Top
Hallo nochmal,

entschuldigt die späte antwort, aber auch nach ein bisschen rumdoktorn klappt es mit batch nicht verlässlich.

Ich habe jetzt in VS ein kleines Programm geschrieben das die restlichen Dateien aufruft und das ganze automatisiert und die Write Time dann in dem VS Programm ausführt.

Vielen Dank und ein schönes Wochenende!

Flo
itebob
itebob 14.01.2023 um 11:41:00 Uhr
Goto Top
@5175293307
Never trust a robot!! Erst recht nicht beim coden.

Ich finde, es ist ungerecht, hier pauschal dem ChatGPT die Schuld zuzuwiesen. Wir wissen doch nicht, welche Frage dem Robot @chatgpt gestellt wurde.

@DarkZoneSD:
- Hast du eine Möglichkeit, deine Frage @chatgpt hier zu zitieren?
- Kannst du detaillierter hier schildern:
-- Ob @chatgpt-anregungen für dich hilfreich waren?
-- Wie hast du evtl. die @chatgpt-lösung verbessert bzw. ergänzt?
DarkZoneSD
DarkZoneSD 15.01.2023 um 11:35:56 Uhr
Goto Top
Moin,

die Session ist leider expired deswegen is der Chat weg. Ich meine es war sinngemäß etwa: "Can you write me a batch script that will create an IF Condition with the condition being that the child items of $Path have a write time that is within the last 30 minutes of now"

Die Anregungen waren tatsächlich recht Hilfreich aber nicht auf das Projekt gesehen.

verbessert oder ergänzt wurde nichts da ich mir das rauskopiert hatte und an einem anderen tag dran weiter arbeiten wollte, jetzt is der chat leider weg.

Grüße
itebob
itebob 15.01.2023 um 12:35:36 Uhr
Goto Top
Moin,

danke für die Rückmeldung @DarkZoneSD.
Zitat von @DarkZoneSD:
die Session ist leider expired deswegen is der Chat weg.
[...]
verbessert oder ergänzt wurde nichts da ich mir das rauskopiert hatte und an einem anderen tag dran weiter arbeiten wollte, jetzt is der chat leider weg.

Verstehe ich es richtig, dass du den kopierten text irgendwo in deiner Arbeitsumgebung abseits https://chat.openai.com/ gespeichert hast? Hast du mehr von der ChatGPT-Antwort übrig, als in deinem Kommentar oben Last Write Time in Batch überprüfen vom 05.01.2023 um 12:34:07 Uhr zitiert?
DarkZoneSD
DarkZoneSD 15.01.2023 um 14:02:12 Uhr
Goto Top
Nein ich hab mir den Thread hier auf dem Forum als Ablage genommen und nein leider nicht. Soweit ich mich erinner war der Chat wirklich auch nur diese Frage und die Antwort das, was ich in dem Kommentar eingefügt habe
itebob
itebob 16.01.2023 um 10:31:21 Uhr
Goto Top
Moin,

Zitat von @DarkZoneSD:

Nein ich hab mir den Thread hier auf dem Forum als Ablage genommen und nein leider nicht.

@DarkZoneSD: Ich bitte um Rückmeldung hier ChatGPT - Session ist expired deswegen is der Chat weg.
itebob
itebob 18.01.2023 um 13:49:16 Uhr
Goto Top
Hallo,

Zitat von @DarkZoneSD:
die Session ist leider expired deswegen is der Chat weg.

Ich habe gerade auch ein Weilchen in ChatGPT eine Anzeige gehabt, wo ich bereits dachte, dass die Session weg ist. Ich wollte einen Screenshot machen, war aber nicht schnell genug - die alte Chats sind wieder eingeblendet. Vlt. hast du einfach nicht lange genug gewartet, bis die ChatGPT-Daten im Browser geladen sind?

gruss, itebob
DarkZoneSD
DarkZoneSD 18.01.2023 um 17:48:20 Uhr
Goto Top
Moin,

ne leider nicht, laden nichtmehr.

Grüße