crazycat-1
Goto Top

Dateien kleiner 100 Byte mit Sicherungsdatei überschreiben per Batch

Ich habe folgendes Problem:

In mehreren Dateien werden Daten aktualisiert.

Vor diesem Schritt werden die Dateien in ein Sicherungsverzeichnis kopiert.

Wenn die Aktualiserung fehlschlägt, wird eine Datei kleiner 100 Byte erzeugt.

Ist dies der Fall, so sollen diese Dateien gelöscht werden und mit den Sciherungsdateien ersetzt werden.
Alle diese Dateien tragen die Endung .dfd

Wie kann das in einer Batch - Routine realisiert werden?

Content-ID: 44578

Url: https://administrator.de/forum/dateien-kleiner-100-byte-mit-sicherungsdatei-ueberschreiben-per-batch-44578.html

Ausgedruckt am: 23.12.2024 um 08:12 Uhr

MCSE-Cheffe
MCSE-Cheffe 16.11.2006 um 10:12:15 Uhr
Goto Top
Hallo,

so ungefähr könnte man es in VBScript lösen, wobei ich nicht genau weis ob auch das Script die Dateien ändern soll und woher die Sicherungsdateien kommen also als Grundgerüst sehen und muss natürlich angepasst werden and deine Umgebung:

Set fso = CreateObject ("Scripting.FileSystemObject")

DateiVerzeichnis = "" ' Quellverzeichnis
Sicherungsverzeichnis = "" ' Zielverzeichnis
Dateigroesse = "100" ' Angabe in Byte

fso.CopyFile DateiVerzeichnis, Sicherungsverzeichnis, vbTrue

Set ZeigerDatei = fso.GetFolder (Sicherungsverzeichnis)
Set Dateien = ZeigerDatei.Files

For Each Datei In Dateien

If Datei.Size < Dateigroesse Then

Datei.Delete
fso.CopyFile DateiVerzeichnis, Sicherungsverzeichnis, vbTrue ' Hier dann dei Pfade anpassen wenn nötig

Else
End If

Next

Gruß MCSE_Cheffe
CrazyCat-1
CrazyCat-1 16.11.2006 um 10:19:42 Uhr
Goto Top
Danke!


Die Dateien sollen nicht geändert werden.

Geändert werden müßten die Zeilen 2 und 3 Skriptes, richtig?

Also:

DateiVerzeichnis = "c:\daten"

und

Sicherungsverzeichnis = "I:\safety"

richtig?


Das Programm kopiert sämtliche Dateien zuerst in den Sicherungsordner und anschließend zurück, wenn die Datei kleiner als 100 Byte ist, richtig?
Kann man das so einrichten das nur dfd - Dateien, welche nicht das Zeichen _ enthalten, kopiert werden?
Das Skript muss ich dann mit start /min /w wscript safety.vbs in der Batch - Datei aufrufen, richtig?
MCSE-Cheffe
MCSE-Cheffe 16.11.2006 um 10:32:24 Uhr
Goto Top
Also:

DateiVerzeichnis = "c:\daten"
Hier musst Du "c:\daten\*.*" schreiben damit alle Dateien gemeint sind!

Sicherungsverzeichnis =
"I:\safety"
Hier "I:\safety\" am ende wird der Backslash noch benötigt

Wie kann man das Skript aus einer Batch -
Datei afrufen?
Das ging doch mit irgendeiner exe und dem
Skript als Parameter, oder?
Wie lautet die EXE, die ich starten
müßte?

Und zum Aufrufen brauchst du keine Batchdatei kann man so aufrufen (Doppelklick oder in der cmd einfach Dateiname.vbs).

Gruß MCSE_Cheffe
CrazyCat-1
CrazyCat-1 16.11.2006 um 10:39:39 Uhr
Goto Top
Also für nur dfd - Dateien anstelle des *.* ein *.dfd

Das Skript soll in eine Batch - Datei integriert werden, deshalb die Frage.
MCSE-Cheffe
MCSE-Cheffe 16.11.2006 um 10:46:36 Uhr
Goto Top
Hi,

mit *.* = alle oder natürlich *.dfd für deine stimmt.

In einer Batchdatei z.B.

@echo off
c:\Dateiname.vbs
exit

Gruß MCSE_Cheffe
CrazyCat-1
CrazyCat-1 16.11.2006 um 10:51:36 Uhr
Goto Top
So einfach funktioniert das auch?

Ich habe immer mit irgendwelchen wscript.exe, cscript.exe usw. gearbeitet.

Werde das gleich mal probieren, das wäre um einiges einfacher.
bastla
bastla 16.11.2006 um 10:54:57 Uhr
Goto Top
Hallo CrazyCat!
Oder vielleicht doch Batch:
for %%i in (C:\Daten\*.dfd) do if %%~zi LSS 100 copy /y "I:\safety\%%~nxi" c:\daten >nul 2>nul  

HTH
bastla

[Edit] Sorry Biber, war geringfügig schneller, weil Du's schöner und gleich richtig gemacht hast face-wink [/Edit]

[Edit2] So versteh' ich's inzwischen auch [/Edit2]
Biber
Biber 16.11.2006 um 10:55:30 Uhr
Goto Top
Moin CrazyCat,

Als Batch wiederum würde das so aussehen:
:: ------snipp RestoreIfUpdateFailed.bat
@for %%i in (c:\Daten\*.dfd) do @if exist i:\Safety\%%~nxi @if %%~zi LSS 100 @ECHO copy /y i:\Safety\%%~nxi %%i >nul
:: ------snapp RestoreIfUpdateFailed.bat
[Der Batch ECHOed im Moment nur, was er tun würde. Nach dem Testen das @echo entfernen.

Gruß
Biber
[Edit] @bastla
Uuups... ich habe es genau umgekehrt herum verstanden:
AUS dem Sicherungsverzeichnis "I:\Safety" die Daten wiederherstellen IN das Datenverzeichnis c:\Daten.....?!?

[Edit2] Passt schon... war nur optisch irreführend..face-wink [/Edit2]
[/Edit]
CrazyCat-1
CrazyCat-1 16.11.2006 um 11:38:49 Uhr
Goto Top
Danke!

Werde beide Varianten sofort ausprobieren und die schnellere davon verwenden.

Das Skript funktioniert mittlerweile schon, braucht aber eine gute Minute bis die Dateien überprüft wurden.

Vielleicht ist die Batch - Lösung etwas schneller.

Btw. im Skript ist ein kleiner Fehler.
Beim 2. Copy müssen die Verzeichnisse umgedreht werden, ansonsten werden die Dateien 2x in das gleiche Verzeichnis kopiert.
MCSE-Cheffe
MCSE-Cheffe 16.11.2006 um 11:49:03 Uhr
Goto Top
Hi,

bei dem zweitem Copy habe ich beim ersten Beitrag einen Kommentar dahinter geschrieben das die Pfade dort angepasst werden müssen.
Das war mir schon klar das das so nicht ganz stimmt darum der Kommentar.

Gruß MCSE_Cheffe
CrazyCat-1
CrazyCat-1 20.11.2006 um 15:05:42 Uhr
Goto Top
Kann man beim VB - Skript irgendwie das Fenster "Datei nicht gefunden" unterdrücken und das Skript ohne Bestätigung zum weiterlaufen zu bewegen?

Das Fenster erscheint gelegentlich beim Ausführen der Zeile 18 des Skritps.
Biber
Biber 24.11.2006 um 17:09:36 Uhr
Goto Top
Moin CrazyCat,

MSCE_Cheffe scheint grad nicht in der Nähe zu sein.
Kannst Du bitte mal den aktuellen Stand des VBS-Schnipsels posten bitte?
Dann können wir eben noch diesen Schönheitsfehler wegschmirgeln und danach den Beitrag mal schließen.

Falls Du den Fehler inzwischen selbst behoben hast, stell das Musterskript doch bitte trotzdem hier rein.

Danke
Biber
CrazyCat-1
CrazyCat-1 29.11.2006 um 19:41:20 Uhr
Goto Top
Sobald ich wieder am Firmen - PC bin, schick' ich dir das Skript.

Kann etwas dauern, da ich derzeit meinen Resturlaub verbrauche. (Hatte bisher noch nicht eine Woche Urlaub, deshalb hab' ich noch 6 Wochen Urlaub gut)
Biber
Biber 30.11.2006 um 06:22:43 Uhr
Goto Top
Moin KratzeKater,

diesen Algorithmus, mit dem Du Deine 6 Wochen Resturlaub noch in 2006 nehmen kannst, hätte ich auch gern - hab dasselbe Problem... face-wink

Ansonsten lass Dich dich durch den den kleinen Bätch nicht stressen. Ich lass den Beitrag offen bis zu Deiner Rückmeldung.

Liebe Grüße
Biber