garcon
Goto Top

Batch-Job zum Dateiverschieben, 0kb Dateien ignorieren

Hallo,

ich habe folgendes Problem.

Meine NAS erhält Dateien geliefert, in ein zentrales Verzeichnis. Mein Server ruft diese Dateien ab, und sortiert diese nach Datei-Endungen vor.

Der Abhole und Sortiervorgang zeigt nun (seit gestern erstmalig) hin und wieder Dateien mit 0kb zu erhalten. Meine Vermutung ist, dass der Schreibvorgang der Gegenseite auf der NAS noch nciht abgeschossen ist, denn von dort kamen im gleichen Zeitfenster wie die Erstelldaten der 0kb-Dateien ein paar Fehlerrückmeldungen.

Der Server holt die Dateien via Sceduled Task in einer batch-datei. das sieht heute etwa folgendermaßen aus:

net use \\NAS /user:test\ pwdxcopy \\NAS\incoming\*.abc d:\externsend\abc_savemove \\NAS\incoming\*.abc d:\externsend\abcxcopy \\NAS\incoming\*.def d:\externsend\def_savemove \\NAS\incoming\*.def d:\externsend\defxcopy \\NAS\incoming\*.xml d:\externsend\xml_savemove \\NAS\incoming\*.xml d:\externsend\xmlnet use \\NAS /d

im eigentlichen Zielverzeichnis wird die Datei weiterverarbeitet, und verschwindet dann, zur Sicherheit lege ich im 1. Schritt (xcopy) eine Kopie in einem Sicherungsordner an, welche nach 7 Tagen gelöscht wird. Nur so konnte ioch überhaupt sehen, dass erstmals 0kb-Dateien angekommen sind.

Ich suche jetzt einen Script-Teil, der obiges tut, aber sicherstellt, dass die Dateien nicht 0kb groß sind. diese müssen auf der NAS verbleiben, weil die Annahme, das der Sender noch schreibt, besteht.

Jetzt kommt es noch etwas komplizierter. Jede Datei auf der NAS hat eine zughörige XML-Datei (gleicher Dateiname, andere Endung). Die xml dient dem Server als erklärung, was er genau dort erhalten hat, bzw. was er damit tun soll. Es darf nun natürlich nciht passieren, dass eine XML transfgeriert wird, während die eigentliche Datei noch 0kb hat, und dehalb ignoriert wurde.

Hat jemand irgendeine gute Idee zur verwirklichung? Ich muss sagen, dass ich mich mit den Shell-Scripten / DOS-Scripten ziemlich schlecht auskenne. copy, move delte und verzeichniswechsel bekomme ich noch hin, auch sonst ein paar kleinigkeiten, aber wie kann ich die Dateieigenschaften auslesen?

Bitte um Mithilfe, vielen Dank
Garcon

Content-Key: 237904

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

Printed on: April 25, 2024 at 22:04 o'clock

Member: Xaero1982
Solution Xaero1982 May 13, 2014, updated at May 14, 2014 at 10:59:39 (UTC)
Goto Top
Moin,

@echo on

set dateiendung=abc
set xml=xml
set quelle=\\NAS\incoming\
set ziel=d:\externsend\

for %%i in (%quelle%*.%xml%) do (for %%x in (%quelle%*.%dateiendung%) do if "%%~ni"=="%%~nx" if %%~zi gtr 0 if %%~zx gtr 0 xcopy "%%i" "%ziel%%%~ni%%~xi"  && xcopy "%%x" "%ziel%%%~nx%%~xx")  

Ich denke anpassen schaffst du face-smile

Im Moment ist es nur für eine Dateiendung.

Evtl. kannst du das mit einer weiteren For-Schleife davor, also mit:

for %%a in (abc def geh) do for %%i in (%quelle%*.%xml%) do (for %%x in (%quelle%*.%%a) do if "%%~ni"=="%%~nx" if %%~zi gtr 0 if %%~zx gtr 0 xcopy "%%i" "%ziel%%%a_save\%%~ni%%~xi"  && move "%%i" "%ziel%"\ && xcopy "%%x" "%ziel%%%a_save\%%~nx%%~xx" && move "%%x" "%ziel%"\)  

alle aufnehmen (ungetestet)

Die Dateiendung xml bleibt ja wie ich es verstanden habe gleich.

Was passiert hier sonst: Er überprüft
"%%~ni"=="%%~nx"  
Ob die Dateinamen gleich sind %%~n liefert nur den Dateinamen ohne Endung zurück. Also wenn zwei Dateien mit dem gleichen Namen vorhanden sind.
Dann prüft er weiter
 if %%~zi gtr 0 if %%~zx gtr 0
ob sowohl die xml als auch die andere Datei größer als 0kb sind. (%%~z) liefert die Dateigröße.

Erst wenn das alles zutrifft kopiert er die Dateien.

Teste erst mal das erste Beispiel ... dann schauen wir weiter.

Gruß
Member: Xaero1982
Xaero1982 May 13, 2014 updated at 15:55:59 (UTC)
Goto Top
@echo on

set xml=xml
set quelle=\\NAS\incoming\
set ziel=d:\externsend\
mkdir %ziel%xml_save
mkdir %ziel%xml


for %%a in (txt bat jpg) do for %%i in (%quelle%*.%xml%) do (for %%x in (%quelle%*.%%a) do if "%%~ni"=="%%~nx" if %%~zi gtr 0 if %%~zx gtr 0 xcopy "%%i" "%ziel%xml_save\" && xcopy "%%x" "%ziel%%%a_save\" && mkdir "%ziel%%%a" && move "%%i" "%ziel%xml\" && move "%%x" "%ziel%%%a\")  

Damit sollte es dann klappen.

Gruß
edit: und er ward nicht mehr gesehen face-smile
Member: Garcon
Garcon May 14, 2014 at 10:59:14 (UTC)
Goto Top
vielen Dank dafür,

bin am Ummodeln und Testen. Werde vermutlich heute Abend die ersten Files drüber jagen können. Musste noch etwas umbauen, weil die Dateinamen

ABCD.EFG
und
ABCD.EFG.XML

zusammengehören. Sprich die %%xi muss inkl. Endung geprüft werden~n. Wenn ich das Coding richtig verstanden habe sollte ich es richtig gemacht haben.

Ich melde mich noch mal, wenn es Probleme gibt, bzw. schließe Dankend, wenn es funktioniert hat.

Gruß
Garcon