Hallo Zusammen
Ich habe ein Problem mit dem Schreiben einer Batch Datei (vlt. währe Powershell auch besser) die alte Daten löscht. Sprich den Teil habe ich eigentlich schon:
forfiles /p P:\test\ar1047 /s /m *_* /d -2000 /c “cmd /c IF @isDir EQU FALSE (del /Q /F @path) & cmd /c echo @path;@file;@fdate>> P:\u\ar\deleted.log & cmd /c echo @path @file @fdate”
Das ganze ist eine ziemlich grosse Ordnerstruktur die so bleiben muss, das funktioniert mit dem löschen so auch. Ich habe einen Ordner "ar" in diesem befinden sich die Ordner "ar0001" - "ar1052" und in jedem dieser Ordner sind
noch einmal 16 Unterordner und in diesen befinden sich die zu löschenden Dateien.
Das Problem ist das die gelöschten Daten noch in einer Datei mit dem Name "ARCHIV" stehen und diese Datei gibt es in mehrerer Unterordner (für die Daten im jeweiligen Unterordner) des Pfades den ich mit forfiles aufräume.
Ich schreibe die Daten in ein Log file also habe ich mir gedacht ich kann diese Information doch weiter nutzen um in den "ARCHIV" Dateien die entsprechende Zeile zu suchen und zu löschen.
Das Log sieht zur Zeit so aus:
"P:\test\ar1111\1236789_05.txt";"1236789_05.txt";19.06.2019
"P:\test\ar1111\123678_03.txt";"123678_03.txt";19.06.2019
"P:\test\ar1111\12367_02.txt";"12367_02.txt";19.06.2019
"P:\test\ar1111\1236_01.txt";"1236_01.txt";19.06.2019
Die "ARCHIV" DATEI sieht so aus:
VERSION 3.00 PART_NAME;MACHINE_NO;MACHINE_NAME;MATERIAL_NO;MATERIAL_NAME;DIMENSION_X;DIMENSION_Y;DIMENSION_Z;HEADER_LINE_01;HEADER_LINE_02;HEADER_LINE_03;HEADER_LINE_04;HEADER_LINE_05;HEADER_LINE_06;HEADER_LINE_07;HEADER_LINE_08;HEADER_LINE_09;HEADER_LINE_10;HEADER_LINE_11;HEADER_LINE_12;HEADER_LINE_13;HEADER_LINE_14;HEADER_LINE_15;HEADER_LINE_16;HEADER_LINE_17;HEADER_LINE_18;HEADER_LINE_19;PART_AREA;PART_AREA_CN;PART_WEIGHT;PART_WGHT_CN;PART_COST_MAIN_TIME;SDATE;STIME;"236749_001_02(M2)";2;"Salvagnini S4";19;"DX51D+ZF100R";2317.000;272.000;1.400;;"TYP1_01_STL_S4";"TYP1_01_STL_S4";"COD";;"DX51D+ZF100R";"KOPFNUMMER_060";"23674912";"236749_001_02";"21.01.2013";"ScRa";"WEMO";"SALVA S4-P4";;;;;;"W 57";614792.500;618075.625;6.7566;6.7927;1.3324;"22.02.2019";"16:08:38";"236749_001_02";1;"TC 5000 R 1600 FMC";19;"DX51D+ZF100R";2317.000;272.500;1.400;;"TYP_1_01_ST";"TYP_1_01_ST";;;"DX51D+ZF100R";"TC 5000 R 1600 FMC";"23674912";"236749_001_02";"22.05.2012";;"WEMO";;"rusitiafr1";"0";;;;;616057.125;619340.250;6.7705;6.8065;2.2987;"22.02.2019";"16:08:35";"236781_001_03(M2)";2;"Salvagnini S4";19;"DX51D+ZF100R";1870.000;400.380;1.400;;"652514_001_03";"652514_001_03";"COD";;"DX51D+ZF100R";"KOPFNUMMER_060";"23678113";"236781_001_03";"31.01.2018";;"T1";"SALVA S4-P4";;;;;;;740352.0625;748710.625;8.1365;8.2283;0.237;"28.01.2019";"16:26:51";"236781_001_03";1;"TC 5000 R 1600 FMC";19;"DX51D+ZF100R";1870.000;400.380;1.400;;"652514_001_03";"652514_001_03";;;"DX51D+ZF100R";"TC 5000 R 1600 FMC";"23678113";"236781_001_03";"11.12.2017";;"T1";;"MEFA";"0";;;;;740352.0625;748710.625;8.1365;8.2283;0.7502;"28.01.2019";"16:26:48";"236781_001_03_999999";1;"TC 5000 R 1600 FMC";19;"DX51D+ZF100R";1870.000;400.3801;1.400;;"652514_001_03";"652514_001_03";;;"DX51D+ZF100R";"TC 5000 R 1600 FMC";"23678113";"236781_001_03";"11.12.2017";;"T1";;"MEFA";"0";;;;;740352.0625;748710.625;8.1365;8.2283;0.7502;"28.01.2019";"16:17:17";
Das ist natürlich nur ein kleiner Auschnitt, wir sprechen hier von einigen 100'000 Dateien und Zeilen in der "ARCHIV" Dateien. Das ganz muss auch nicht schnell gehen. Sobald mal alle alten Daten gelöscht wurden soll die Batch Datei wöchentlich
(Wochenende) über die Aufgabenplanung ausgeführt werden. Dann sind es geschätz so 5000 Dateien pro Woche.
Ich möchte nun die erste Zeile der Log Datei in 3 Variabeln schreiben(path, name & date).
Mit Pfad soll zuerst der Pfad festgelegt werden. Da Drin soll geprüft werden ob die Datei "ARCHIV existiert" wenn nein Zeile in Log löschen und wieder von vorne (Schleife)
Wenn ja soll mithilfe der Variable "name" die Zeile in der "ARCHIV" Datei gesucht werden. Die Variable "date" soll verwendet werden um zu prüfen ob die gefunden Zeile dieses Datum auch enthält,
wenn ja Zeile in der "ARCHIV" Datei und in der Log Datei löschen. Wenn nein nur Zeile in Log löschen und wieder von vorne (Schleife).
Was ich bisher, neben der ForFiles Anweisung habe:
@echo off
for /f "delims=; tokens=1" %%a in ('more/e +0 ^< deleted.log') do (
if not defined p set "p=%%a"
)
echo %p%
for /f "delims=; tokens=2" %%a in ('more/e +0 ^< deleted.log') do (
if not defined n set "n=%%a"
)
echo %n%
for /f "delims=; tokens=3" %%a in ('more/e +0 ^< deleted.log') do (
if not defined d set "d=%%a"
)
echo %d%
pause
findstr /V /s "1236789" ARCHIV.txt > P:\test\ar1111\ARCHIV_.txt
Das Problem ist da auch noch das die neue Datei den Pfad enthält. Das sieht dann so aus:
ar1111\ARCHIV.txt:1236_01.txt
ar1111\ARCHIV.txt:12367_02.txt
ar1111\ARCHIV.txt:123678_03.txt
anstatt so:
1236_01.txt
12367_02.txt
123678_03.txt
Kann mir da jemand helfen?
Gruss
Fabio