DOS/ Batch Programmierung

ich möchte ein kurzes kleines Dos-Batch-Programm schreiben, das folgendes macht:

vergleiche alle Daten im Order X, und lösche alle Daten, die älter sind als 3 Tage…

kann mir jemand einen Tip geben, wie und mit welchen Befehlen ich das machen kann…

gruss
rafato

Für welches Betriebssystem?
Für welches Betriebssystem?

Für welches Betriebssystem?

hallo mayo …

für win2000, aber das spielt doch keine Rolle oder ???

ich möchte ein kurzes kleines Dos-Batch-Programm schreiben,
das folgendes macht:

vergleiche alle Daten im Order X, und lösche alle Daten, die
älter sind als 3 Tage…

Hallo Rafato,
nur ne Idee, die Dateien in dem Ordner X, ist bei denen das Archiv-Atribut immer gleich, also bei allen gesetzt bzw. bei allen nicht gesetzt?
Gruß
Reinhard

Hallo Reinhard, in der Regel sind die Attribute gleich, muss aber nicht immer so sein…
was haben die Attribute mit Datum zu tun ?!?!?

gruss rafato

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

vergleiche alle Daten im Order X, und lösche alle Daten, die
älter sind als 3 Tage…

Hallo RAFATO,

du hast gute Voraussetzungen (Win2k). Ich würde dir empfehlen, mal unter

http://www.cygwin.com

eine Reihe von Freeware UNIX/GNU-Tools zu besorgen. Dort gibt es unter anderem das nette Progrämmchen ‚find‘, mit dem dein Problem zum Einzeiler mutiert. Wozu denn das Rad immer neu erfinden?

Gruß
Bernhard

was haben die Attribute mit Datum zu tun ?!?!?

nix *gg* war nur eine Idee wie man separieren könnte in ‚löschen‘ oder ‚nicht löschen‘

Hallo Rafato,
tja mit ner kurzer Batch ist es bei normalem Dos nie weit her wenn es komplizierter wird. Und 3 Tage zurück in Einbeziehung von unterschiedlichen Monatslängen ist nicht so einfach.
Ich habe es so gelöst, daß immer der aktuelle Tag und 3 Tage davor erhalten bleiben. D.h. am 01. März im Schaltjahr löscht die batch dann alles außer dem 29-31 Februar *g*.
Ggfs, die sichern.bat ist überschaubar, fügst du jeweils noch Tage dazu, so daß dann immer nicht bis 3 sondern bis 5 Tage zurück die Dateien erhalten bleiben, dann bleiben auch im Schaltjahr noch die Dateien vom 27. und 28. Februar erhalten wenn der 1 .März kommt.
Ansonsten scheinen die batches zu laufen in win98!, nur halt das erwähnte Problem beim Monatswechsel. War mir zu aufwendig dies auch noch auf alle Monaslängen zu perfektionieren. Die Batch erwartet das Datumsformat in der Form mm-tt-jjj , wenn das in mm/tt/jjjj vorliegt, müssen die beiden
find „-%2-“ …Befehle geändert werden auf find „%2/“… bzw. find "/%2/…, je nachdem wo der Tag steht.

Kopiere alle 4 folgenden *.bat in das Verzeichnis c:\x und rufe die dat4.bat auf.
Ansonsten ist es ja einfach ‚c:\x‘ mittels Ersetzen a in den Batches auf den korrekten Pfad zu x umzustellen.
Gruß
Reinhard

dat4.bat:

@echo off
if not „%1“=="" goto weiter
echo. | date > datum.tmp
for %%n in (01 02 03 04 05 06 07 08 09 10) do call %0 nix %%n
for %%n in (11 12 13 14 15 16 17 18 19 20) do call %0 nix %%n
for %%n in (21 22 23 24 25 26 27 28 29 30 31) do call %0 nix %%n
set heute=%tt%
for %%g in (*.*) do call dat5.bat %%g
for %%d in (*.*) do call loesch.bat %%d
xcopy c:\x\sichern*.*
echo j | del c:\x\sichern*.*
rd c:\x\sichern
cls
goto ende

weiter

find „-%2-“ datum.tmp > nul
if not errorlevel==1 if errorlevel==0 set tt=%2

ende

dat5.bat:

@echo off
if not „%2“=="" goto weiter
if „%1“==„DAT4.BAT“ goto ende
if „%1“==„DAT5.BAT“ goto ende
if „%1“==„DATUM.TMP“ goto ende
if „%1“==„LOESCH.BAT“ goto ende
if „%1“==„SICHERN.BAT“ goto ende
set dircmd=
set datei=%1
dir /a:-d | find /i „%1“ > datum.tmp
for %%n in (01 02 03 04 05 06 07 08 09 10) do call %0 nix %%n
for %%n in (11 12 13 14 15 16 17 18 19 20) do call %0 nix %%n
for %%n in (21 22 23 24 25 26 27 28 29 30 31) do call %0 nix %%n
call sichern.bat %datei% %heute% %tt%
goto ende

weiter

find „-%2-“ datum.tmp > nul
if not errorlevel==1 if errorlevel==0 set tt=%2

ende

loesch.bat:

@echo off
if „%1“==„DAT4.BAT“ goto ende
if „%1“==„DAT5.BAT“ goto ende
if „%1“==„SICHERN.BAT“ goto ende
if „%1“==„LOESCH.BAT“ goto ende
if „%1“==„DATUM.TMP“ goto ende
del %1

ende

sichern.bat:

@echo off
rem echo %1 %2 %3
if not exist c:\x\sichern\nul md c:\x\sichern
if „%2“==„01“ set kurz=29 30 31 01
if „%2“==„02“ set kurz=30 31 01 02
if „%2“==„03“ set kurz=31 01 02 03
if „%2“==„04“ set kurz=01 02 03 04
if „%2“==„05“ set kurz=02 03 04 05
if „%2“==„06“ set kurz=03 04 05 06
if „%2“==„07“ set kurz=04 05 06 07
if „%2“==„08“ set kurz=05 06 07 08
if „%2“==„09“ set kurz=06 07 08 09
if „%2“==„10“ set kurz=07 08 09 10
if „%2“==„11“ set kurz=08 09 10 11
if „%2“==„12“ set kurz=09 10 11 12
if „%2“==„13“ set kurz=10 11 12 13
if „%2“==„14“ set kurz=11 12 13 14
if „%2“==„15“ set kurz=12 13 14 15
if „%2“==„16“ set kurz=13 14 15 16
if „%2“==„17“ set kurz=14 15 16 17
if „%2“==„18“ set kurz=15 16 17 18
if „%2“==„19“ set kurz=16 17 18 19
if „%2“==„20“ set kurz=17 18 19 20
if „%2“==„21“ set kurz=18 19 20 21
if „%2“==„22“ set kurz=19 20 21 22
if „%2“==„23“ set kurz=20 21 22 23
if „%2“==„24“ set kurz=21 22 23 24
if „%2“==„25“ set kurz=22 23 24 25
if „%2“==„26“ set kurz=23 24 25 26
if „%2“==„27“ set kurz=24 25 26 27
if „%2“==„28“ set kurz=25 26 27 28
if „%2“==„29“ set kurz=26 27 28 29
if „%2“==„30“ set kurz=27 28 29 30
if „%2“==„31“ set kurz=28 29 30 31
if „%2“==„01“ set kurz=29 30 31 01
for %%c in ( %kurz% ) do if %3==%%c xcopy %1 c:\x\sichern > nul

kann mir jemand einen Tip geben, wie und mit welchen Befehlen
ich das machen kann…

vermutlich wird das mit den vorhandenen befehlen nicht möglich sein (ich nehm mal an du meinst damit die internen befehle)

du mal eintippen:
cmd /?

dann gibts noch die externen befehle (programme) unter winnt\system32

man könnte mit xcopy /d: … nur die besagten dateien kopieren und im zielverzeichnis löschen.
allerdings kenne ich kein standard programm bei nt/2000 mit denen man rechnen kann … und das bräuchte man um das aktuelle datum um 3 tage zurückzurechnen.

in der annahme du willst das datum nicht jeweils selbst eingeben.

du wirst folglich irgendein externes programm benutzt müssen, wie weiter unten jemand schon geposted hat.

gruss
rafato

STK

Hallo!

Ich habe mal ein Sicherungsprogramm geschrieben, das sowas kann (Option ‚Quelldateien löschen die älter sind als x Tage‘).
Wenn dus haben willst…

Gruß Pauli

Hallo,

ich kann dir leider keinen konkreten Code posten, aber ich würde mir mal die in W2K eingebaute Skripte-Engine, VBScript anschauen. Ist um einiges mächtiger als DOS-Batches, über die Dateisystem-Objekte kann man recht einfach auf die verschiedenen Datums-Eigenschaften einer Datei zugreifen (Created, Last Modified, etc.). Und überprüfen ob das drei Tage zurückliegt ist auch ganz einfach.

Könnte etwa so aussehen:

Dim fso, files, file

Set fso = CreateObject( "Scripting.FileSystemObject" )
Set files = fso.getFolder( "c:\pfad" ).files

For Each File in Files
 If File.DateCreated 

Einfach als .vbs-Datei abspeichern, dann kannst du es mit Doppelklick ausführen. Hab den Code jetzt allerdings nur einfach runtergetippt, nicht getestet.

Bei weiteren Fragen, frag einfach. :smile:

Grüße, Robert