Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Bedingung in Abhängigkeit vom Alter einer Datei

Mitglied: cmichel

cmichel (Level 1) - Jetzt verbinden

24.08.2006, aktualisiert 04.09.2006, 7847 Aufrufe, 11 Kommentare

Hi @ all,

Ich hoffe jemand kann mir helfen:
Was ich brauche ist ein dos script, welches das alter einer bestimmten Datei abfragt
und dann in einer Bedingung auf eine bestimmte Position springt.

Wenn Datei älter als 30 min dann gehe dahin ansonsten gehe dorthin

Ich hoffe mal für die DOS Profis hier ist das eine 3min Sache ;)

MfG
Christof
Mitglied: bastla
27.08.2006 um 20:26 Uhr
Hallo Christof!

Da ich kein DOS-Profi bin kann ich nur eine Lösung per VB-Script anbieten:

01.
'Script ISOLD.vbs 
02.
 
03.
'Erwartete Argumente: Datei, Minuten 
04.
 
05.
'Rückgabe: errorlevel = 0 für Datei ist älter als "Minuten" 
06.
'		  errorlevel = 1 für Datei existiert, ist aber nicht älter als "Minuten" 
07.
'	  	errorlevel = 2 für Fehler; bei Bedarf kann weiter differenziert werden 
08.
'				       (zB fehlende Argumente, Datei nicht gefunden, ... s. u.) 
09.
 
10.
Dim fso, f, mins 
11.
Set fso = CreateObject("Scripting.FileSystemObject") 
12.
If WScript.Arguments.Count <> 2 Then 
13.
	WScript.Quit(2) 'zu wenig Argumente übergeben --> Rückgabe errorlevel 2 
14.
Else 
15.
	f = WScript.Arguments(0) 
16.
	mins = CInt(WScript.Arguments(1)) 
17.
End If 
18.
 
19.
If Not fso.FileExists(f) Then WScript.Quit(2) 
20.
'Datei nicht gefunden --> Rückgabe errorlevel 2 
21.
 
22.
If mins <= 0 Then WScript.Quit(2) 
23.
'Parameterwert für "Minuten" negativ oder 0 --> Rückgabe errorlevel 2 
24.
 
25.
If DateDiff("n", fso.GetFile(f).DateLastModified, Now()) <= mins Then WScript.Quit(1) 
26.
'Datei nicht älter als "Minuten" --> Rückgabe errorlevel 1 
27.
 
28.
'Datei ist "alt" --> "Normales" Script-Ende mit errorlevel 0 
29.
set fso = Nothing

Der folgende Beispielbatch überprüft die Datei "Z:\Test.txt" auf ein Alter von 30 Minuten
(Annahme: Die obige Script-Datei ist als ISOLD.vbs in "C:\Scripts" gespeichert):

01.
CScript //nologo "C:\Scripts\ISOLD.vbs" Z:\test.txt 30 
02.
if errorlevel 2 goto Fehler 
03.
if errorlevel 1 goto jung 
04.
echo alt 
05.
goto Ende 
06.
:Fehler 
07.
echo Fehler! 
08.
goto Ende 
09.
:jung 
10.
echo jung 
11.
:Ende
HTH
bastla
Bitte warten ..
Mitglied: Biber
27.08.2006 um 21:50 Uhr
Moin cMichel,

nur eine Variation des Themas bzw. der Strategie....
Ich würde es ähnlich wie bastla machen, aber den VBS-Teil nur für die reine DateDiff-Ermittlung verwenden - und die Programmlogik (und Variabilität, also die Prüfung auf x Minuten) im Batch lassen.

Mein VBS-Schnipsel sähe sinngemäß so aus:
01.
'----GetFileMinutes.vbs 
02.
Set fso = CreateObject ("Scripting.FileSystemObject")  
03.
Set f = fso.getfile(wscript.arguments(0))  
04.
WScript.echo DateDiff("n", f.DateLastModified, now())  
05.
'------snapp GetFileMinutes.vbs
Der Aufruf wäre entsprechend
CScript //nologo GetFileMinutesvbs DeineDatei.xyz
...und die Rückgabe eine Zahl (geändert von ... Minuten).

Die Auswertung im Batch entsprechend:
01.
for /f %%i in ('cscript //nologo GetfileMinutes.vbs DeineDatei.xyz') do if %%i GEQ 30 Goto IsOlder 
02.
goto :NothingToDo 
03.
.... 
04.
:IsOlder 
05.
....bla.... 
06.
::-----Ende der Skizze
Vorteil ist (für mich), dass ich die drei VBS-Zeilen schnell aus dem Batch heraus mit ECHO erzeugen kann.
Falls nicht das letzte Änderungsdatum das Kriterium ist, sondern das Entstehungsdatum, dann im VBS-Snippet ändern auf f.DateCreated.

Gruß
Biber
Bitte warten ..
Mitglied: cmichel
28.08.2006 um 08:38 Uhr
Hi ihr lieben,

Erstmal Vielen Dank für eure Mühe!
Leider müssen wir VB aussen vor lassen, da alles unter DOS abläuft.
Hintergrund ist das durchsuchen von Festplatten nach Dateienamen in eine txt Datei
Da dies sehr Zeitaufwendig ist brauch dies nicht bei jedem start der batch datei zu erfolgen.

Vielleicht eine andere Idee...
Man speichert die aktuelle Zeit zwischen und wenn 30 min vergangen sind soll er die Festplatten durchsuchen oder ansonsten kann der Teil übersprungen werden.
Vielleicht wäre das unter DOS machbar?

Vielen Dank für die Hilfe!

Gruß
Christof
Bitte warten ..
Mitglied: Biber
28.08.2006 um 09:18 Uhr
Moin Christof,

dann teile uns aber mit, von welchem Betriebssystem wir ausgehen müssen.
Ab Win2k sollte sich auch mit native Batch eine Lösung finden lassen - bei Win95/Win98 wird es sicherlich etwas holzig.

Gruß
Biber
Bitte warten ..
Mitglied: cmichel
03.09.2006 um 09:48 Uhr
Hallo Biber,

Das OS ist WinXP Prof.

Gruß
Christof
Bitte warten ..
Mitglied: Biber
03.09.2006 um 13:18 Uhr
Moin cmichel,

na, ich weiß nicht, ob Du das richtig verstanden hast...
Leider müssen wir VB aussen vor lassen, da alles unter DOS abläuft.
Es geht gar nicht um VB, sondern um VBSkript und überhaupt nicht um DOS, sondern um die CMD.exe

In Bereich "Batch & Shell" steht ein kleines Tutorial zum Thema "Umgang mit Datums- und Zeitvariablen im Batch" mit einer allgemein verwendbaren Datum/Zeit-Aufdrösel-Batchdatei namens GetAllDateTimeInfos.bat.
Diese nutzt aber wiederum vorhandene VBS-Funktionalitäten, alldieweil im Batch keinerlei Datumsberechnungen unterstützt werden.
Und man/frau schlicht und einfach albern wird, wenn es trotzdem über native Batch abgefackelt werden soll.

Das kann ich mit einem Pur-Batch-Schnipsel belegen:
01.
:: --snipp GetFileMinutesDemo.bat Parameter1 Filename/File-Wildcards 
02.
:: Placed in the Public Domain for Educational Purposes Biber 2006 
03.
@echo off & setlocal 
04.
call :DateToDays todayInDays %date%    && REM Heutiges Datum  als Ganzzahl 
05.
call :TimeToMins todaysMinutes %time%  && REM Minuten sei Mitternacht als Ganzzahl 
06.
 
07.
For %%i in (%1) do call :CompareMinutes %%i %todayInDays% %TodaysMinutes% 
08.
goto :eof 
09.
~~~~~~~~~~ Ende des Hauptbatches... es folgen geCALLte Unterroutinen 
10.
:CompareMinutes Parameter1:Datei; Para2: Heute als Ganzzahl; Para3: Minuten heute seit Mitternacht  
11.
For /f "tokens=1-2" %%a in ("%~t1") do ( 
12.
   call :DateToDays FileInDays %%a  && REM DateiDatum als Ganzzahl 
13.
   call :TimeToMins FileMinutes %%b && Rem Datei-Minuten seit Mitternacht 
14.
15.
if %fileinDays% GEQ 25550 (echo [GTR] %~t1 %~f1 ist definitiv nicht aus diesem Jahrhundert) && goto:eof 
16.
REM wenn Jahresendzahl größergleich 70 dann annehmen 1970....1999. [70*365 = 25550] 
17.
Set /a "yesterday=%2-1" 
18.
if %fileinDays% LSS %yesterday% (echo [GTR] %~t1 %~f1 ist definitiv älter als 30 Min) && goto:eof 
19.
if %fileinDays% LSS %2                  Set /a "TodayCompMinutes=%3+(60*24)-30"      
20.
If %fileinDays% LSS %2 if 1%todayCompMinutes% GTR 1%fileMinutes% ( 
21.
    (echo [GTR] %~t1 %~f1: von gestern; älter als 30 Minuten)  && goto :eof 
22.
) else ( 
23.
    (echo [LEQ] %~t1 %~f1: von gestern; jünger als 30 Minuten) && goto :eof 
24.
25.
REM verbleibender Fall: Datei ist von Heute: 
26.
Set /a "FileMinutes+=30" 
27.
If %fileminutes% LSS %3 ( 
28.
   echo [GTR] %~t1 %~f1: von heute; älter als 30 Minuten 
29.
) else ( 
30.
   echo [LSS] %~t1 %~f1: von heute; jünger als 30 Minuten 
31.
)   
32.
goto :eof 
33.
~~~~~~~~~~~ 
34.
:DateToDays ; Para1=Variablenname; Para2 [,Para3] :Datum als "[ttt] TT.MM.[JJ]JJ"  
35.
For %%i in (%2 %3) do set "now=%%i" 
36.
for /f "tokens=1-3 delims=./" %%a in ("%now%") do ( 
37.
      Set /a "%1=((%%c%%100)*365)+((1%%b-100)*12)+(1%%a-100)" ) 
38.
goto :eof 
39.
~~~~~~~~~~ 
40.
:TimeToMins Parameter1: Variablenname Parameter2:Zeit im Format hh:mm 
41.
For /f "tokens=1-2 delims=:" %%a in ("%2") do set /a "%1=(1%%a-100)*60+(1%%b-100)" 
42.
:: ---snapp GetFileMinutesDemo.bat
Wenn ich diesen Schnipsel gegen ein oder mehrere Dateien laufen lasse (um 13:07h!), bekomme ich so etwas am CMD-Prompt:
01.
$cmd$d:\temp\GetFileMinutesDemo.bat *.txt 
02.
[GTR] 04.04.00 23:19  Z:\putinenv.txt ist definitiv älter als 30 Min 
03.
[GTR] 03.09.06 11:37  Z:\vonheute.txt: von heute; älter als 30 Minuten 
04.
[GTR] 02.09.06 18:43  Z:\vongestern.txt: von gestern; älter als 30 Minuten 
05.
[GTR] 03.09.06 12:36  Z:\vonheute2.txt: von heute; älter als 30 Minuten 
06.
 
07.
Z:\> 
08.
$cmd$echo xx>>vonheute2.txt 
09.
 
10.
Z:\> 
11.
$cmd$d:\temp\GetFileMinutesDemo.bat *.txt 
12.
[GTR] 04.04.00 23:19  Z:\putinenv.txt ist definitiv älter als 30 Min 
13.
[GTR] 03.09.06 11:37  Z:\vonheute.txt: von heute; älter als 30 Minuten 
14.
[GTR] 02.09.06 18:43  Z:\vongestern.txt: von gestern; älter als 30 Minuten 
15.
[LSS] 03.09.06 13:07  Z:\vonheute2.txt: von heute; jünger als 30 Minuten
... das heißt, Für jede angefasste/abgefragte Datei bekommst Du eine Zeile mit dem Dateinamen und dem abprüfbaren String "[GTR]", falls die Datei älter als 30 Minuten ist bzw "LSS", wenn die Datei jünger ist als 30 Minuten.

Du kannst also, wie es hier im Forum schon mehrfach vorgehampelt wurde, mit "Find" und Prüfung des Errorlevels Deine Programmlogik steuern.
Beispiel:
01.
d:\temp\GetFileMinutesDemo.bat vonheute2.txt|find "[LSS}" >nul && echo Datei ist jünger als 30 Minuten 
02.
-oder- 
03.
d:\temp\GetFileMinutesDemo.bat vonheute2.txt|find "[LSS}" >nul || echo Datei ist älter als 30 Minuten
Aber dazu findest Du genug Beispiele hier - ich wollte ja nur den Algorithmus skizzieren.

Gruß
Biber
P.S. Ist -wie geschrieben- albern, dieses Rad neu zu erfinden bzw. native Batch hier als Werkzeug zu verwenden.
Für den Rest meiner monatlichen Admin-Aufgaben brauche ich weniger Zeilen.
Bitte warten ..
Mitglied: cmichel
04.09.2006 um 08:08 Uhr
Hallo Biber,

Ja das wird mir auf jeden fall weiterhelfen!
Vielen Dank!

Gruß
Christof
Bitte warten ..
Mitglied: Biber
04.09.2006 um 09:09 Uhr
Moin cmichel,

dennoch, auch wenn ich mich damit wiederholen sollte, halte ich bastla's Ansatz mit Nutzung der DateDiff()-Funktion von VB/JScript für die "richtige" Lösung und habe es entsprechend bewertet.

Ich empfehle Dir dringend noch einmal die Klärung, ob wirklich auf dieses Standardwerkzeug verzichtet werden muss.
Sicherheitsrisiken werden aus meiner Sicht durch die Vorteile kompensiert.
Und, falls Sicherheitsaspekte der Grund gegen VBS gewesen sein sollten:
Eure Rechner könnte ich auch mit native Batch zu mehr oder weniger dekorativen Briefbeschwerern umfunktionieren.
Und wenn ich das könnte, gibt es sicherlich weitere 2 Millionen DAUs mit ausreichender krimineller Energie und Kreativiät.

Bitte setze den Beitrag auf "Gelöst", wenn für Dich keine wesentlichen Fragen mehr offen sind.

Danke
Biber
Bitte warten ..
Mitglied: cmichel
04.09.2006 um 12:53 Uhr
Hi Biber,

Das script habe ich unter date.bat gespeichert.
Ich habe gerade mal versuch die batch mal aufzurufen mit:
date files.txt
Dann kommt bei mir der Hinweis:
Eingegebenes Datum kann nicht übernommen werden.
Geben Sie das neue Datum ein: (TT-MM-JJ)

Was mache ich da falsch?
Gruß
Christof
Bitte warten ..
Mitglied: Biber
04.09.2006 um 13:12 Uhr
Moin cmichel,

das kollidiert mit dem gleichlautenden internen CMD-Befehl "date", der Vorrang hat.

Abhilfe:
a) recommended: Deine *.bat-Datei umbenennen z.B. in Find30MinFiles.bat oder AlleDateienÄlterAlsEineHalbeStundeSuchen.bat oder Karlheinz.bat...
...jedenfalls nicht date.bat

b) nicht empfohlen:
Datei so lassen, wie sie heißt und explizit mit Pfadangabe aufrufen, z.B c:\bätsche\date.bat

Gruß
Biber
Bitte warten ..
Mitglied: cmichel
04.09.2006 um 13:41 Uhr
Hi Biber,

Jo funktioniert!
Vielen Dank für deine Hilfe!!!

Gruß
Christof
Bitte warten ..
Ähnliche Inhalte
HTML

Abhängigkeiten in einer HTML-Datei finden

Frage von StefanKittelHTML8 Kommentare

Hallo, ich arbeite gerade an einem Projekt in PHP (7.0) um webseiten statisch abzulegen. Um alle Folgeseiten und Abhängigkeiten ...

Batch & Shell

Dateien in Abhängigkeit des Dateinamens auf eine bestimmte Zeichenzahl kürzen und verschieben

gelöst Frage von Booster07Batch & Shell11 Kommentare

Hallo zusammen, ich habe zwei Probleme, bei denen ich auf Eure kompotente Hilfe hoffe: Problem 1: Ich habe sehr ...

Batch & Shell

Xcopy jedoch nur die Dateien die nicht älter

gelöst Frage von zeroblue2005Batch & Shell13 Kommentare

Hallo Zusammen, Wie kann ich diese Script anpassen, so dass aus der Quelle nur die Dateien kopiert werden, die ...

Batch & Shell

Dateien (keine Ordner) löschen die älter sind als

gelöst Frage von siziigilendirmezBatch & Shell4 Kommentare

Guten Morgen ich möchte gerne mit einer power Shell Dateien löschen die älter als 30 tage sind. Die Dateien ...

Neue Wissensbeiträge
Sonstige Systeme
Es war einmal ein BeOS - Wer erinnert sich noch?
Information von BassFishFox vor 1 TagSonstige Systeme5 Kommentare

Hallo, Bin gerade ueber Haiku gestolpert, von dessen Existenz als "Nachfolger des BeOS" ich wusste nur mich nie wirklich ...

Datenschutz

Microsoft und DSGVO - ob das wohl jemals klappt (Probleme beim Datenabfluss für Office Pro Plus)?

Tipp von VGem-e vor 1 TagDatenschutz3 Kommentare

Servus Kollegen, siehe Aber wer setzt schon MS Office Pro Plus ein? Wie dann der Stand beim "normalen" MS ...

Windows 10

Macht Windows 10.1809 Probleme mit gemappten Netzlaufwerken (betrifft wohl insbes. AMD-Hardware und Trend Micro AV-Produkte)?

Tipp von VGem-e vor 1 TagWindows 103 Kommentare

Moin Kollegen, grad dazu gefunden und Hatten wir dies nicht bei früheren W10-Upgrades ebenfalls? Da bleibt nur, das Upgrade ...

Humor (lol)

Das neue Miniatur Wunderland OFFICIAL VIDEO - worlds largest model railway - railroad

Information von StefanKittel vor 2 TagenHumor (lol)2 Kommentare

Hallo, wer noch nie im Miniatur Wunderland war, sollte es dringend mal nachholen. Es gibt eine neues Video. Viele ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Gäste-WLAN durch DD-WRT AP nach einem MikroTik Routerboard
Frage von NukolarLAN, WAN, Wireless16 Kommentare

Hallo, wie der Titel schon sagt möchte ich gerne ein Gäste-WLAN innerhalb eines bestehenden LANs einrichten. Dass die Gäste ...

DSL, VDSL
DSL Monitoring Tool - Quick and dirty?
Frage von george44DSL, VDSL15 Kommentare

Liebe Gemeinde, ich suche ein einfaches und vor allem schnell zu installierendes Monitoring-Tool zur kontinuierlichen Dokumentation (nur) der Internetanbindung. ...

Exchange Server
Outlook findet Postfach nicht
Frage von MaximaxExchange Server11 Kommentare

Hallo, und zwar haben wir auf der Arbeit ein kleines (großes) Exchange 2016 Problem. Exchange meldete gestern, dass die ...

Informationsdienste
Probleme auf dem Server
Frage von LangeLangeInformationsdienste9 Kommentare

Hallo zusammen, ich betreibe die Seite Keine Werbelinks. In der Analyse stellen wir fest, dass die Ladezeit in der ...