Batch erstellen

Mydgard

Commander
Dabei seit
Sep. 2002
Beiträge
2.312
Hallo allerseits,


ich möchte/muss für die Firma ein Batchfile erstellen, was folgendes können soll:

Eine Datei die im Ordner c:\faktura liegt soll jeden Tag die neueste Version vom Server ziehen. Dabei soll die vorhandene Datei nicht überschrieben werden, sondern die vorhandene Datei soll umbenannt werden.

Soweit so einfach:

ren c:\faktura\datei.mdb datei_alt.mdb
copy h:\datei.mdb c:\faktura\datei.mdb

Nun wird aber jeden Tag die erstellte Sicherungsdatei vom vor Tag überschrieben. Ich möchte aber, das jeden Tag eine Extra Kopie erstellt wird, idealerweise mit einem Datum.

Meine Frage ist daher: Gibt es für Dos Batch Files eine Datumsvariable die ich in den rename Befehl einbauen kann?
Und zweitens: Kann man das irgendwie auf z.B. 20 Dateien begrenzen?!

Danke
 

HaZu

Commander
Dabei seit
Okt. 2011
Beiträge
2.553
%Date% heißt die

Sowas kann man machen

Code:
     SET TODAY=%DATE%_datei_alt.mdb
   copy h:\datei.mdb c:\faktura\%TODAY%
für deine zweite Frage sehe ich so keine Lösung.
 
Zuletzt bearbeitet:

razzy

Lieutenant
Dabei seit
Sep. 2009
Beiträge
780
Für die 2. Variante könntest du mit jeden durchlauf die Dateien im Ordner zählen. (Ja, das geht)

und könntest dann entweder die letzte löschen und dann die neuste ziehen oder halt was anderes

Code:
for /F "tokens=*" %%i in ('dir^|find "Datei(en)"') do set DATANZ=%%i
for /F "tokens=1" %%i in ("%DATANZ%") do set DATANZ=%%i
echo %DATANZ%
 
Zuletzt bearbeitet:

heinzm62

Lieutenant
Dabei seit
Juli 2011
Beiträge
607
Ich mache lasse etwas recht ähnliches durch "robocopy" erledigen, allerdings müsstest du es für Windows 2000 und älter wohl nachinstallieren. Es handelt sich um ein Windows cmdlt welches einfach via Batchdatei deine Befehle ausführt, ist sehr einfach zu handhaben, selbst ich als kein Freund von cmdlt bin damit sehr gut zurecht gekommen und es funktioniert absolut tadellos. Starten lasse ich das Batchfile via Taskplaner.
 

Kraligor

Commodore
Dabei seit
Sep. 2008
Beiträge
4.989
Zweite Frage: Wie genau meinst Du das? Sollen immer nur die 20 aktuellsten Dateien behalten werden?

Falls ja, dann irgendein "for i in [Folder]: if [file_date] < ([real_date] -20)] then delete else keep"..
Keine Ahnung, mit Batch kenne ich mich nicht aus, aber so sollte das schon irgenwie gehen.

EDIT: Ach ja, bei dem Löschscript würde ich doppelt vorsichtig sein, damit es nicht durch irgendeinen unvorhergesehenen Umstand alle oder die falschen Dateien löscht (Jahreswechsel, zurückgesetzte BIOS-Uhr, fehlende aktualisierte Datei auf dem Server etc.).
 
Zuletzt bearbeitet:

Mydgard

Commander
Ersteller dieses Themas
Dabei seit
Sep. 2002
Beiträge
2.312
@ Kraligor: Ja genau, die Datei die kopiert wird ist ungefähr 30 mb groß, sofern da jeden Tag die Datei beim hochfahren kopiert wird, sind das bei 52 Wochen im Jahr, jeweils 5 Tage ja schon 260 Datei-Versionen x 30 mb = 7800 MB ... viele unserer PCs haben aber nur 80 GB HDDs ... mal abgesehen davon, das das ziemlich unübersichtlich wird.
Die Datei auf dem Server wird eh nur alle paar Wochen aktualisiert, geht einfach darum das alle die aktuelle Datei haben (Frontend für die Kaufmännische Software unter MS Access)

@ heinzm62: Bei jedem Start wird schon eine Batch ausgeführt (vom Domänencontroller her), dabei werden die Netzlaufwerke verbunden, je PC anders, je nachdem welche Netzlaufwerke benötigt werden.
In diese Batch könnte man die Befehle ja mit hineinschreiben.

@ razzy: Hui, kenne mich mit DOS von früher eigentlich recht gut aus, aber deine Befehle sagen mir schon mal nichts :) Muss ich mal googlen.

@ Hazu: Klingt ja schon nicht schlecht, aber irgendwie macht er da nichts, reicht der SET Befehl aus um da was umzubenennen oder muss der eingebaut werden in einen "ren" Befehl?

Danke schon mal an alle :)
 

frogger9

Commodore
Dabei seit
Feb. 2008
Beiträge
4.194
Code:
Echo OFF

:Backup-Verzeichnis festlegen
Set BKUP=D:\Test

:DT feststellen
For /F "Tokens=1,2,3 Delims=. " %%a in ('Date /T') do set D=%%c-%%b-%%a_
For /F "Tokens=1,2 Delims=: " %%a in ('Time /T') do set T=%%a-%%b


:Verschieben
ren c:\faktura\datei.mdb datei_alt.mdb
For /F "Tokens=*" %%i in ('Dir /B c:\faktura\datei_alt.mdb') do Copy "%%~i" "%BKUP%\%D%%T%.mdb"
copy h:\datei.mdb c:\faktura\datei.mdb
Automatisches Löschen ist immer ein Risiko, zB. kann man aber DelAge32 verwenden.
http://www.horstmuc.de/wbat32d.htm
 
Top