flipmode85
Goto Top

Batchdatei erfordert Dateinamen - Ausführen, Sortieren und Umbenennen Schleife

Hallo,

ich heiße Jürgen, bin 25 Jahre alt und beschäftige mich derzeit mit der Programmierung von Werkzeugmaschinen.
Hierzu benötige ich einige Hilfsmittel wie in diesem Falle eine *.bat welche eine Verschlüsselungsfolge ausführt
die Datei umbenennt und in den richtigen Ordner speichert.

Das ganze sollte mehr oder weniger "automatisch" ablaufen, sprich wird eine Datei in Verzeichnis C:/XYZ mit der Dateiendung *.XYZ abgespeichert sollte diese durch eine weitere *.bat-Datei Verschlüsselt werden. Die Verschlüsselung habe ich bereits selbst erstellt, bzw. auf vorhandenem aufgebaut. Die Datei crypt.bat führt eine CHG.exe Datei aus, welche die ASCII/ANSI Zeichen umwandelt. Ich bin mit BATCH noch Neu und habe mich ein paar Tage eingelesen und das erste Ergebnis ist die crypt.bat.

Der Ablauf sollte so aussehen:

Verzeichnis C:\XYZ | Stammverzeichnis
Verzeichnis C:\XYZ/DATA | Datenverzeichnis in welchen die Ursprunsdaten abgespeichert werden.
Verzeichnis C:\XYZ/DATA/TXT/ | Datenverzeichnis in welches die Originaldatei nach der Verschlüsselung verschoben wird.
Verzeichnis C:\XYZ/DATA/ORIGIN/ Datenverzeichnis für die Originaldatei

Die Dateiendung der zu Verschlüsselnden Dateien ist immer gleich *.XYZ, jedoch beinhaltet der Dateiname ein % als Vorzeichen ( %123.XYZ ) Das machte mir schon Probleme ;-(

Um eine Datei zu Verschlüsseln muss der Dateiname angefügt werden: Beispiel crypt.bat %123.XYZ

Wird eine solche Datei in den Ordner C: \XYZ/DATA abgespeichert, sollte die crypt.bat Datei diese automatisch Verschlüsseln und anschließend in den Ordner C:\XYZ/DATA/TXT/ verschieben. Meine Versuche sind leider Fehlgeschlagen. Die CHG.exe Datei überschreibt die zu Verschlüsselnde Datei automatisch, daher wäre es Sinnvoll vor der Verschlüsselung die Originaldatei in den Ordner C:\XYZ/DATA/ORIGIN/ zu kopieren.

Meine Frage hierzu: Ist es besser eine weitere *.bat Datei anzulegen in welcher meine "Wünsche" abgelegt werden, oder kann dies direkt in die crypt.bat mit aufgenommen werden? Ist das ganze üerhaupt machbar?


@echo off
cls
Rem Verschlüsseln
CHG -i %1 -s [15] -r [15]
CHG -i %1 -s [19] -r [19]
CHG -i %1 -s [32] -r [32]
CHG -i %1 -s [35] -r [163]
CHG -i %1 -s [37] -r [165]
CHG -i %1 -s [40] -r [40]
CHG -i %1 -s [41] -r [169]
CHG -i %1 -s [44] -r [172]
CHG -i %1 -s [45] -r [45]
CHG -i %1 -s [49] -r [177]
CHG -i %1 -s [50] -r [178]
CHG -i %1 -s [51] -r [51]
CHG -i %1 -s [52] -r [180]
CHG -i %1 -s [53] -r [53]
CHG -i %1 -s [54] -r [54]
CHG -i %1 -s [55] -r [183]
CHG -i %1 -s [56] -r [184]
CHG -i %1 -s [57] -r [57]
CHG -i %1 -s [60] -r [60]
CHG -i %1 -s [61] -r [189]
CHG -i %1 -s [62] -r [190]
CHG -i %1 -s [65] -r [65]
CHG -i %1 -s [66] -r [66]
CHG -i %1 -s [67] -r [195]
CHG -i %1 -s [68] -r [68]
CHG -i %1 -s [69] -r [197]
CHG -i %1 -s [70] -r [198]
CHG -i %1 -s [71] -r [71]
CHG -i %1 -s [72] -r [72]
CHG -i %1 -s [73] -r [201]
CHG -i %1 -s [74] -r [202]
CHG -i %1 -s [76] -r [204]
CHG -i %1 -s [77] -r [77]
CHG -i %1 -s [78] -r [78]
CHG -i %1 -s [79] -r [207]
CHG -i %1 -s [80] -r [80]
CHG -i %1 -s [81] -r [209]
CHG -i %1 -s [82] -r [210]
CHG -i %1 -s [83] -r [83]
CHG -i %1 -s [84] -r [212]
CHG -i %1 -s [85] -r [85]
CHG -i %1 -s [86] -r [86]
CHG -i %1 -s [87] -r [215]
CHG -i %1 -s [88] -r [216]
CHG -i %1 -s [89] -r [89]
CHG -i %1 -s [90] -r [90]
cls
echo --> Datei erfolgreich Konvertiert

Content-Key: 148848

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

Ausgedruckt am: 28.03.2024 um 13:03 Uhr

Mitglied: 60730
60730 12.08.2010 um 12:02:13 Uhr
Goto Top
Salü,

anbei ein erster ungetesteter aus dem Bauch geschriebener Versuch

:start
Rem Betapahse ungetestet
Rem @echo off

if not exist C:\XYZ\DATA\*.xyz goto end
for /f %%a in ('dir /b C:\XYZ\DATA\*.xyz') do (  
		copy C:\XYZ\DATA\%%a C:\XYZ/DATA\ORIGIN\
		call :crypt  %%a
		move C:\XYZ\DATA\%%a C:\XYZ/DATA\TXT\
)
goto eof

:crypt
CHG -i %1 -s [15] -r [15]
CHG -i %1 -s [19] -r [19]
CHG -i %1 -s [32] -r [32]
CHG -i %1 -s [35] -r [163]
CHG -i %1 -s [37] -r [165]
CHG -i %1 -s [40] -r [40]
CHG -i %1 -s [41] -r [169]
CHG -i %1 -s [44] -r [172]
CHG -i %1 -s [45] -r [45]
CHG -i %1 -s [49] -r [177]
CHG -i %1 -s [50] -r [178]
CHG -i %1 -s [51] -r [51]
CHG -i %1 -s [52] -r [180]
CHG -i %1 -s [53] -r [53]
CHG -i %1 -s [54] -r [54]
CHG -i %1 -s [55] -r [183]
CHG -i %1 -s [56] -r [184]
CHG -i %1 -s [57] -r [57]
CHG -i %1 -s [60] -r [60]
CHG -i %1 -s [61] -r [189]
CHG -i %1 -s [62] -r [190]
CHG -i %1 -s [65] -r [65]
CHG -i %1 -s [66] -r [66]
CHG -i %1 -s [67] -r [195]
CHG -i %1 -s [68] -r [68]
CHG -i %1 -s [69] -r [197]
CHG -i %1 -s [70] -r [198]
CHG -i %1 -s [71] -r [71]
CHG -i %1 -s [72] -r [72]
CHG -i %1 -s [73] -r [201]
CHG -i %1 -s [74] -r [202]
CHG -i %1 -s [76] -r [204]
CHG -i %1 -s [77] -r [77]
CHG -i %1 -s [78] -r [78]
CHG -i %1 -s [79] -r [207]
CHG -i %1 -s [80] -r [80]
CHG -i %1 -s [81] -r [209]
CHG -i %1 -s [82] -r [210]
CHG -i %1 -s [83] -r [83]
CHG -i %1 -s [84] -r [212]
CHG -i %1 -s [85] -r [85]
CHG -i %1 -s [86] -r [86]
CHG -i %1 -s [87] -r [215]
CHG -i %1 -s [88] -r [216]
CHG -i %1 -s [89] -r [89]
CHG -i %1 -s [90] -r [90]
goto eof

:end
ping localhost -n 10>nul
goto start


Gruß
Mitglied: flipmode85
flipmode85 12.08.2010 um 13:18:33 Uhr
Goto Top
Danke, das klappt soweit. Lediglich die Verschlüsselung wird nicht ausgeführt, da der Dateiname nicht erkannt wird. Es fehlen bei der Ausabe das % und das erste Zeichen im Dateinamen. Evtl. kann man es unabhängig von Dateinamen ob mit % oder ohne erledigen?
Auch schließt sich das Fenster nach dem Vorgang, ist es möglich den Vorgang aufrecht zu erhalten und solange zu Verweilen bis eine neue Datei im Ordner abgelegt wird welche erneut abgearbeitet wird. Somit würde diese *.bat mit Windows starten und im Hintergrund laufen.

:start
@echo off
if not exist C:\NC_NUM\DATA\*.NUM goto end
for /f %%a in ('dir /b C:\NC_NUM\DATA\*.NUM') do (  
		copy C:\NC_NUM\DATA\%%a C:\NC_NUM\DATA\ORIGIN\
		call :crypt  %%a
		move C:\NC_NUM\DATA\%%a C:\NC_NUM\DATA\NC\
)
goto eof

:crypt
CHG -i %1 -s [15] -r [15]
CHG -i %1 -s [19] -r [19]
CHG -i %1 -s [32] -r [32]
CHG -i %1 -s [35] -r [163]
CHG -i %1 -s [37] -r [165]
CHG -i %1 -s [40] -r [40]
CHG -i %1 -s [41] -r [169]
CHG -i %1 -s [44] -r [172]
CHG -i %1 -s [45] -r [45]
CHG -i %1 -s [49] -r [177]
CHG -i %1 -s [50] -r [178]
CHG -i %1 -s [51] -r [51]
CHG -i %1 -s [52] -r [180]
CHG -i %1 -s [53] -r [53]
CHG -i %1 -s [54] -r [54]
CHG -i %1 -s [55] -r [183]
CHG -i %1 -s [56] -r [184]
CHG -i %1 -s [57] -r [57]
CHG -i %1 -s [60] -r [60]
CHG -i %1 -s [61] -r [189]
CHG -i %1 -s [62] -r [190]
CHG -i %1 -s [65] -r [65]
CHG -i %1 -s [66] -r [66]
CHG -i %1 -s [67] -r [195]
CHG -i %1 -s [68] -r [68]
CHG -i %1 -s [69] -r [197]
CHG -i %1 -s [70] -r [198]
CHG -i %1 -s [71] -r [71]
CHG -i %1 -s [72] -r [72]
CHG -i %1 -s [73] -r [201]
CHG -i %1 -s [74] -r [202]
CHG -i %1 -s [76] -r [204]
CHG -i %1 -s [77] -r [77]
CHG -i %1 -s [78] -r [78]
CHG -i %1 -s [79] -r [207]
CHG -i %1 -s [80] -r [80]
CHG -i %1 -s [81] -r [209]
CHG -i %1 -s [82] -r [210]
CHG -i %1 -s [83] -r [83]
CHG -i %1 -s [84] -r [212]
CHG -i %1 -s [85] -r [85]
CHG -i %1 -s [86] -r [86]
CHG -i %1 -s [87] -r [215]
CHG -i %1 -s [88] -r [216]
CHG -i %1 -s [89] -r [89]
CHG -i %1 -s [90] -r [90]
goto eof

:end
ping localhost -n 10>nul
goto start
Mitglied: icsat
icsat 12.08.2010 um 14:12:01 Uhr
Goto Top
Hallo Jürgen,

imho funktioniert die Übergabe nicht wenn ein "%" im Dateinamen enthalten ist nicht. Ich meine es gibt dafür auch keine mir bekannte Lösung.

Du kannst aber in der FOR-Schleife vor dem CALL einfach ein
set "datei=%%a"  
verwenden.

Den CALL dann ohne Übergabeparameter und in der :crypt Routine statt %1 einfach %datei% verwenden.

Schreibst Du hinter der FOR Schleife statt "GOTO eof" einfach "GOTO end" schleift das Ding ewig. Timo ist bestimmt davon ausgegangen das crypt.bat soll aus einem anderen Job heraus aufgerufen werden und sich nach getaner Arnbeit beenden.

Gruß icsat
Mitglied: flipmode85
flipmode85 12.08.2010 um 14:41:49 Uhr
Goto Top
Danke - das hilft mir schonmal weiter.

@echo off

if not exist C:\NC_NUM\DATA\*.NUM goto end
for /f %%a in ('dir /b C:\NC_NUM\DATA\*.NUM') do (  
		set "datei=%%a"  
		copy C:\NC_NUM\DATA\%datei% C:\NC_NUM\DATA\ORIGIN\
		call :crypt
		move C:\NC_NUM\DATA\%datei% C:\NC_NUM\DATA\NC\
)

Ist das so korrekt? Es wird nun als Dateiname %a ausgegeben, ich hab da wohl noch einen Fehler drin?
Mitglied: icsat
icsat 12.08.2010 um 14:47:54 Uhr
Goto Top
hab mich wohl nicht deutlich genug ausgedrückt, sorry:

for /f %%a in ('dir /b C:\NC_NUM\DATA\*.NUM') do (   
		copy C:\NC_NUM\DATA\%%a C:\NC_NUM\DATA\ORIGIN\ 
                set "datei=%%a"  
		call :crypt 
		move C:\NC_NUM\DATA\%%a C:\NC_NUM\DATA\NC\ 
) 

Nachtrag:
Hast Du eben noch was geändert? Das sah doch gerade noch anders aus?

Wenn Du DATEI in der FOR-Schleife verwenden willst muss Du !DATEI! statt %DATEI% verwenden.
Dazu ist es allerdings erforderlich zu Beginn des Batch ein
setlocal enabledelayedexpansion 
zu verwenden.
Mitglied: flipmode85
flipmode85 12.08.2010 um 14:54:52 Uhr
Goto Top
Ich denke, ich hab es eher nicht Verstanden face-wink.
Danke erstmal - hab es abgeändert der Zugriff scheint gelungen. Allerdings erhalte ich nun eine Fehlermeldng:
error: couldn´t find any file matching file name %100.NUM

Die Datei %100.NUM ist vorhanden und im Ordner C:\NC_NUM\DATA abgelegt.
Mitglied: icsat
icsat 12.08.2010 um 15:00:38 Uhr
Goto Top
Du setzt in Datei ja auch nur den Dateinamen.

set "datei=C:\NC_NUM\DATA\%%a"  
Mitglied: flipmode85
flipmode85 12.08.2010 um 15:26:37 Uhr
Goto Top
SUPER DANKE!

ich hab es nochmal abgeändert, die Endlosschleife verhindert wohl das:
move C:\NC_NUM\DATA\%%a C:\NC_NUM\DATA\NC\  


die Datei verschoben wird. Ein weiteres Problem ist es, das in der Endlosschleife die crypt.bat aufgerufen wird, welche aber Fehler ausgibt, sofern keine Datei im Ordner C:\NC_NUM\DATA\ vorhanden ist. Auch werden Dateinamen mit mehr 4 Stellen nicht erkannt. Ist aber alles nicht weiter tragisch, es klappt besser als ich es mir vorgesellt hatte. Vielen Dank an icsat und TIMO face-wink


Hier nochmal der Code:

:start
@echo off
for /f %%a in ('dir /b C:\NC_NUM\DATA\GCODE\*.NUM') do (   
	copy C:\NC_NUM\DATA\GCODE\%%a C:\NC_NUM\DATA\ORIGIN\ 
		set "datei=C:\NC_NUM\DATA\GCODE\%%a"  
			call :crypt 
				move C:\NC_NUM\DATA\GCODE\%%a C:\NC_NUM\DATA\NUM\ 
) 
goto eof 

:crypt
CHG -i %datei% -s [15] -r [15]
CHG -i %datei% -s [19] -r [19]
CHG -i %datei% -s [32] -r [32]
CHG -i %datei% -s [35] -r [163]
CHG -i %datei% -s [37] -r [165]
CHG -i %datei% -s [40] -r [40]
CHG -i %datei% -s [41] -r [169]
CHG -i %datei% -s [44] -r [172]
CHG -i %datei% -s [45] -r [45]
CHG -i %datei% -s [49] -r [177]
CHG -i %datei% -s [50] -r [178]
CHG -i %datei% -s [51] -r [51]
CHG -i %datei% -s [52] -r [180]
CHG -i %datei% -s [53] -r [53]
CHG -i %datei% -s [54] -r [54]
CHG -i %datei% -s [55] -r [183]
CHG -i %datei% -s [56] -r [184]
CHG -i %datei% -s [57] -r [57]
CHG -i %datei% -s [60] -r [60]
CHG -i %datei% -s [61] -r [189]
CHG -i %datei% -s [62] -r [190]
CHG -i %datei% -s [65] -r [65]
CHG -i %datei% -s [66] -r [66]
CHG -i %datei% -s [67] -r [195]
CHG -i %datei% -s [68] -r [68]
CHG -i %datei% -s [69] -r [197]
CHG -i %datei% -s [70] -r [198]
CHG -i %datei% -s [71] -r [71]
CHG -i %datei% -s [72] -r [72]
CHG -i %datei% -s [73] -r [201]
CHG -i %datei% -s [74] -r [202]
CHG -i %datei% -s [76] -r [204]
CHG -i %datei% -s [77] -r [77]
CHG -i %datei% -s [78] -r [78]
CHG -i %datei% -s [79] -r [207]
CHG -i %datei% -s [80] -r [80]
CHG -i %datei% -s [81] -r [209]
CHG -i %datei% -s [82] -r [210]
CHG -i %datei% -s [83] -r [83]
CHG -i %datei% -s [84] -r [212]
CHG -i %datei% -s [85] -r [85]
CHG -i %datei% -s [86] -r [86]
CHG -i %datei% -s [87] -r [215]
CHG -i %datei% -s [88] -r [216]
CHG -i %datei% -s [89] -r [89]
CHG -i %datei% -s [90] -r [90]
cls
echo Fertig
goto eof
:end
ping localhost -n 10>nul
goto start
Mitglied: icsat
icsat 12.08.2010 um 17:12:35 Uhr
Goto Top
Helfen doch gerne face-wink

Warum der move nicht funktionieren sollte und jetzt nach Änderung der Pfade funktioniert erschließt sich mir allerdings so spontan nicht.
Auch Deine Aussage zu den 4 Zeichen im Dateinamen ist für mich nicht schlüssig.

Dafür würde es helfen die beiden
goto eof
durch
goto :eof
zu ersetzen. Dann sollte auch die Fehlermedung verschwinden.

Den Part ab Zeile 61 kannst Du übrigens löschen, da der nun nicht mehr angesprungen wird.
Mitglied: flipmode85
flipmode85 16.08.2010 um 00:14:55 Uhr
Goto Top
Danke, das funktioniert nun - und sogar sehr gut!


Leider kommt aber schon das nächste Problem. Dies sieht wie folgt aus.

Die Datei welche von einem Programm ausgegeben wird, welches ich nicht ändern kann ( Verschlüsselte *.exe-Datei ) gibt in dieser Datei einen Wert aus, welcher mit einem weiteren Zahlenwert addiert werden müsste.

Die Datei ist wie folgt aufgebaut:
[SZ] = Wert um welcher der WERT "Z" addiert werden soll. Dieser Wert wird in die zu verändernde Datei geschrieben.

X 1234.00 Y1234.00 Z -1234.00

Hier sollte der Wert "Z-1234.00" um den Zahlenwert [SZ], angenommen 10.00 addiert werden. Bei dem angegebenen Wert handelt es sich um einen negativen Wert.
Das Ergebnis sollte anschließend so aussehen: Z1244.00 Die zwei Nachkommastellen werden benötigt, das Trennzeichen ist jedoch kein Komma sondern ein PUNKT!

Soweit ich das aus einigen Beispielen hier entnehmen konnte, müsste man wohl mit Variablen arbeiten? Die Schwierigkeit besteht darin, das es in der Textdatei auch Werte gibt welche gleich Formatiert sind, etwa "Z 123.00" und nicht verändert werden sollen. Die Anzahl der Zeilen welche verändert werden müssen variiert. Die Datei welche verändert werden sollte, kann vor den Zahlenwerten andere Zeichen ausgeben, etwa eine Variable - damit erkennbar wird was verändert werden sollte und was nicht.
Idealerweise sollte der Wert [SZ] nach dem addieren der Z-Werte aus der Datei gelöscht werden. Das ganze muss natürlich vor der Verschlüsselung geschehen.

Auch hier schlugen meine ersten Versuche fehl, bzw. total daneben ;-(.

Ist das überhaupt möglich?

Grüße

Jürgen
Mitglied: icsat
icsat 16.08.2010 um 07:58:47 Uhr
Goto Top
Hallo Jürgen,

Zitat von @flipmode85:
Ist das überhaupt möglich?
Es gibt nur sehr wenige Dinge, die nicht möglich sind.

Zitat von @flipmode85:
X 1234.00 Y1234.00 Z -1234.00
Ich schließe daraus, dass zwischen Buchstaben und Zahlen mal eine SPACE steht und mal nicht. Richtig?

Zitat von @flipmode85:
Hier sollte der Wert "Z-1234.00" um den Zahlenwert [SZ], angenommen 10.00 addiert werden. Bei dem angegebenen Wert
Oben war zwischen "Z" und "-" noch ein SPACE. Was den nun?

Zitat von @flipmode85:
Das Ergebnis sollte anschließend so aussehen: Z1244.00 Die zwei Nachkommastellen werden benötigt, das Trennzeichen ist
Im modifizierten Ergebnis soll kein SPACE stehen?

Zitat von @flipmode85:
besteht darin, das es in der Textdatei auch Werte gibt welche gleich Formatiert sind, etwa "Z 123.00" und nicht
Wenn nichts geändert wird soll ein SPACE erhalten bleiben?

Enthalten die Datensätze in der Datei immer ausschließlich die Werte X, Y und Z?
Sollen nur Ganzzahlen addiert werden oder evtl. Zahlen mit Nachkommastellen ungleich "00"?

Ich würde mich an Deiner Stelle einmal mit dem FOR auseinander setzen.
FOR /?
Habe gerade keine Windows Kiste griffbereit, mir würde aber etwas in diese Richtung "for /f tokens delims" vorschweben.

Gruß icsat
Mitglied: flipmode85
flipmode85 16.08.2010 um 08:36:30 Uhr
Goto Top
Guten Morgen,

danke für die schnelle antwort!!
Die Werte müssen an den Buchstaben anhängen, dazwischen sollte kein Leerzeichen sein. Der Text wird wie unten stehen angegeben und so Formatiert. Der Wert ZL112 darf nicht verändert werden!

N210	#851	(ISO)		G90		XY	ZL112					
N230	#851	(ISO)		G1		X98.73		Y98.85		Z-2.50					
N240	#851	(ISO)		G1		X98.73		Y100.39		Z-2.50					
N250	#851	(ISO)		G1		X102.28		Y100.39		Z-2.50					
N260	#851	(ISO)		G1		X102.28		Y98.85		Z-2.50					
N270	#851	(ISO)		G1		X98.73		Y98.85		Z-2.50					

Hierbei kann die Zeile jedoch auch variieren und wie folgt aussehen.
 N230	#851	(ISO)		G1		Z-2.50				


Der Header der Datei sieht wie folgt aus:
%101.0		
N10	#2000	(FRAESER:START-POS.)	
#	L140=	0.0	L141=	0.0	L142=	-10	L143=	1	L144=	102	L145=	12000	L146=	1524	L147=	1	L148=	0	
#	G77H9956	

Hier kann der Parameter L142= -10 verwendet werden, dieser muss nicht gelöscht werden, sofern dieser weiterhin im gleichen Format in die Datei geschrieben werden kann.

Es wäre es von Vorteil das eine weitere Datei als *.txt mit gesamten Inhalt und den geänderten Werten erstellt wird und diese in einem weiteren Unterordner abgelegt wird, damit ich das Ergebnis auch kontrollieren kann. Es wird wohl Zeit, mir ein richtiges Buch zu kaufen und mich viel mehr mit dieser Thematik beschäftigen muss.

EDIT: Auch die Nachkommastellen sollten sollten in das Ergebnis eingerechnet werden.


Mein Lösungsansatz:

:start
@echo off
for /f %%a in ('dir /b C:\NC_NUM\DATA\GCODE\*.NUM') do (   
REM Create Variables
set /a LineNo=0
set /a Summe=0
for /f "usebackq skip=1 tokens=2" %%i in ('dir /b C:\NC_NUM\DATA\GCODE\*.NUM') do set /a Summe+=%%i  
>C:\NC_NUM\DATA\TRANS\%%a echo %Summe%
REM Get copy in folders
copy C:\NC_NUM\DATA\GCODE\%%a C:\NC_NUM\DATA\ORIGIN\ 
set "datei=C:\NC_NUM\DATA\GCODE\%%a"  
call :crypt 
move C:\NC_NUM\DATA\GCODE\%%a C:\NC_NUM\DATA\NUM\ 
)
goto :eof 
Mitglied: flipmode85
flipmode85 16.08.2010 um 15:55:04 Uhr
Goto Top
Das scheint so nicht zu funktionieren, der Lösungansatz ist evtl. richtig, allerdings mache ich wohl einen Fehler bei der Benennung der Variablen?
Mitglied: icsat
icsat 17.08.2010 um 20:52:16 Uhr
Goto Top
Sorry, dass ich erst jetzt antworten kann. Die Kombination von Zeit und Windowskiste war in den letzten Tagen leider nicht wirklich gegeben.

Das mit dem Buch würde ich mir schenken, für die wenigen Befehle lohnt sich dass imho nicht. Da lernt man im Internet und insbesondere hier viel besser. Es gibt zu jedem Problem unzählige Beispiele. Ich lege Dir da für den Anfang einfach mal Biber's Workshops an Herz.
Workshop Batch for Runaways - Part I - Beispiel FindLongPath.Bat Bedenklich lange Pfade finden
Workshop Batch for Runaways - Part II - Ein bisschen Handwerkszeug
Workshop Batch for Runaways - Part III - Datums- und Zeitvariablen im Batch
Außerdem findest Du unter Anleitungen auch noch diverse andere Dinge von Intresse.

Nun aber zu Deinen Problem:
  1. Mir ist noch nicht klar woher der Wert ([SZ]) für die Addition genommen werden soll. Habe ich in Deinem Beispiel nicht gefunden, daher habe ich den in meinen Skript erst mal als Fix angenommen.
  2. Was bedeutet "Hier kann der Parameter L142= -10 verwendet werden, ..."? Soll auch auf die 10 der Fixe Wert addiert werden oder soll die 10 als Wert für die Addition genommen werden?
  3. Minus Zeichen habe ich vollkommen ignoriert und bin immer von absoluten Werten ausgegangen.
  4. Ein Problem ist, dass Du im Batch nur mit Ganzzahlen rechnen kannst. Daher habe ich die Zahl in Vorkomma und Nachkommestellen zerlegt.
  5. Ich bin davon ausgegangen, dass eine Zeile maximal ein "Z" enthält.
  6. Weiter bin ich davon ausgegangen, dass eine "ZL"-Zeile nicht modifiziert wird und bei allen anderen "Z"-Zeilen dem "Z" immer der zu modifizierende Wert folgt.

Leider sind das jede Menge Annahmen.

Folgendes habe ich als Eingeabe verwendet:
%101.0		
N10	#2000	(FRAESER:START-POS.)	
#	L140=	0.0	L141=	0.0	L142=	-10	L143=	1	L144=	102	L145=	12000	L146=	1524	L147=	1	L148=	0	
#	G77H9956	
N210	#851	(ISO)		G90		XY	ZL112					
N230	#851	(ISO)		G1		X98.73		Y98.85		Z-2.50					
N240	#851	(ISO)		G1		X98.73		Y100.39		Z-2.50					
N250	#851	(ISO)		G1		X102.28		Y100.39		Z-2.50					
N260	#851	(ISO)		G1		X102.28		Y98.85		Z-2.50					
N270	#851	(ISO)		G1		X98.73		Y98.85		Z-2.50					
N230	#851	(ISO)		G1		Z-2.50				

Und bei der Addition von 3.99 habe ich folgende Ausgabe erhalten:
%101.0		
N10	#2000	(FRAESER:START-POS.)	
#	L140=	0.0	L141=	0.0	L142=	-10	L143=	1	L144=	102	L145=	12000	L146=	1524	L147=	1	L148=	0	
#	G77H9956	
N210	#851	(ISO)		G90		XY	ZL112					
N230	#851	(ISO)		G1		X98.73		Y98.85		Z6.49				
N240	#851	(ISO)		G1		X98.73		Y100.39		Z6.49				
N250	#851	(ISO)		G1		X102.28		Y100.39		Z6.49				
N260	#851	(ISO)		G1		X102.28		Y98.85		Z6.49				
N270	#851	(ISO)		G1		X98.73		Y98.85		Z6.49				
N230	#851	(ISO)		G1		Z6.49				

Sollte das jetzt nicht Deinen Vorstellungen entsprechen poste doch bitte mal ein Vorher / Nacher. Evtl. mit etwas mehr und möglichst variantenreicheren Zeilen.

Dein modifiziertes Skript:
:start
:@echo off
setlocal EnableDelayedExpansion
set "gcode=C:\NC_NUM\DATA\GCODE"  
set "origin=C:\NC_NUM\DATA\ORIGIN"  
set "add=C:\NC_NUM\DATA\ADD"  
set "num=C:\NC_NUM\DATA\NUM"  

for /f %%a in ('dir /b %GCODE%\*.NUM') do (   
	REM Get copy in folders
	move %GCODE%\%%a %ORIGIN%\
	set "eingabe=%ORIGIN%\%%a"  
        set "ausgabe=%GCODE%\%%a  
	call :add
        copy !AUSGABE! %ADD%\
	call :crypt 
	move !AUSGABE! %NUM%\
)

:ende
endlocal
goto :eof 



:add
for /f "delims=Z tokens=1,2" %%i in (%EINGABE%) do (  
    set addvk=3
    set addnk=99
	set "zteil=%%j"  
	if "!ZTEIL!"=="" (  
		echo %%i>>%AUSGABE%
	) else (
		if "!ZTEIL:~0,1!"=="L" (  
			echo %%iZ%%j>>%AUSGABE%
		) else (
			for /f "tokens=1,2,3 delims=-.	" %%k in ("!ZTEIL!") do (  
				set /a vk=%%k+!ADDVK!
				set /a nk=%%l+!ADDNK!
				if !NK! GEQ 100 set /a vk+=1 && set /a nk-=100
				echo %%iZ!VK!.!NK!				%%m>>%AUSGABE%
			)
		)
	)
)

goto :eof



:crypt
CHG -i %AUSGABE% -s [15] -r [15]
CHG -i %AUSGABE% -s [19] -r [19]
CHG -i %AUSGABE% -s [32] -r [32]
CHG -i %AUSGABE% -s [35] -r [163]
CHG -i %AUSGABE% -s [37] -r [165]
CHG -i %AUSGABE% -s [40] -r [40]
CHG -i %AUSGABE% -s [41] -r [169]
CHG -i %AUSGABE% -s [44] -r [172]
CHG -i %AUSGABE% -s [45] -r [45]
CHG -i %AUSGABE% -s [49] -r [177]
CHG -i %AUSGABE% -s [50] -r [178]
CHG -i %AUSGABE% -s [51] -r [51]
CHG -i %AUSGABE% -s [52] -r [180]
CHG -i %AUSGABE% -s [53] -r [53]
CHG -i %AUSGABE% -s [54] -r [54]
CHG -i %AUSGABE% -s [55] -r [183]
CHG -i %AUSGABE% -s [56] -r [184]
CHG -i %AUSGABE% -s [57] -r [57]
CHG -i %AUSGABE% -s [60] -r [60]
CHG -i %AUSGABE% -s [61] -r [189]
CHG -i %AUSGABE% -s [62] -r [190]
CHG -i %AUSGABE% -s [65] -r [65]
CHG -i %AUSGABE% -s [66] -r [66]
CHG -i %AUSGABE% -s [67] -r [195]
CHG -i %AUSGABE% -s [68] -r [68]
CHG -i %AUSGABE% -s [69] -r [197]
CHG -i %AUSGABE% -s [70] -r [198]
CHG -i %AUSGABE% -s [71] -r [71]
CHG -i %AUSGABE% -s [72] -r [72]
CHG -i %AUSGABE% -s [73] -r [201]
CHG -i %AUSGABE% -s [74] -r [202]
CHG -i %AUSGABE% -s [76] -r [204]
CHG -i %AUSGABE% -s [77] -r [77]
CHG -i %AUSGABE% -s [78] -r [78]
CHG -i %AUSGABE% -s [79] -r [207]
CHG -i %AUSGABE% -s [80] -r [80]
CHG -i %AUSGABE% -s [81] -r [209]
CHG -i %AUSGABE% -s [82] -r [210]
CHG -i %AUSGABE% -s [83] -r [83]
CHG -i %AUSGABE% -s [84] -r [212]
CHG -i %AUSGABE% -s [85] -r [85]
CHG -i %AUSGABE% -s [86] -r [86]
CHG -i %AUSGABE% -s [87] -r [215]
CHG -i %AUSGABE% -s [88] -r [216]
CHG -i %AUSGABE% -s [89] -r [89]
CHG -i %AUSGABE% -s [90] -r [90]

goto :eof

Ich hoffe ich habe mich jetzt bei den Verzeichnissen nicht vertan. Ach so, ich habe noch ein Verzeichnis ADD angelegt, in welchem die Datei nach Modifikation und vor Verschlüsselung gesichert wird.

Ich bin mir jetzt nicht sicher, welche Datenmengen Du verarbeiten willst. Sollte die Dateien umfangreicher sein, könnte es einen zeitlichen Vorteil bringen, das ganze z.B. mit Hilfe von VBS zu lösen.
Ich hatte einmal täglich mehrere Dateien, die insgesamt wenige Gigabyte Daten enthielten und musse die erste Stelle von jedem Datensatz von 1 auf 2 ändern. Insgesamt so ca. 3,5 Mio Datensätze.
Mein Batch lag da bei etwa 30 Minuten wenn ich mich noch richtig erinnere, mein VBS bei unter einer Minute Verarbeitungszeit.

Gruss icsat
Mitglied: flipmode85
flipmode85 18.08.2010 um 08:53:12 Uhr
Goto Top
Guten Morgen,

danke für Deine Hilfe - das zeit mir schon sehr deutlich was alles mit BATCH möglich ist.
Im Anhang ist eine weitere etwas größere Datei, die häufigkeit der Z-Werte ist sehr verschieden.

1 Mir ist noch nicht klar woher der Wert ([SZ]) für die Addition genommen werden soll. Habe ich in Deinem Beispiel nicht gefunden, daher habe ich den in meinen Skript erst mal als Fix angenommen.

Es wurde nun noch der Header der Datei angefügt, damit ein 1:1 Vergleich möglich ist. Der Wert der der zum Z-Wert addiert werden soll, lässt sich in Zeile 18 finden L142= -10 dieser kann sich verändern
Ich habe wohl noch eine wichtige Sache nicht erklärt, das muss ich vergessen haben. Wie im Beispiel zu sehen ist hat Parameter eine größe von L142 = -10.

Originaldatei:
N230	#851	(ISO)		G1		Z-4.00		F800			

Modifiziert:
N230	#851	(ISO)		G1		Z-14.00		F800			

es sollten nur die Z-Werte geändert werden, welche als Vorzeichen ein - (minus) haben.
Eine Zeile mit folendem Inhalt:
N3510	#851	(ISO)		G0						Z5.00					

darf nicht verändert werden. Ich hatte vergessen dies zu erwähnen, bzw. war mir das vorher selbst nicht bewusst.
Dies hat damit zu tun, das es sich um Koordinaten in einem Absolutsystem handelt.


Anbei ein längerer Code:

 
%100.0		
N10	#1600	(HAUPTPROG.>>UP.)	
#	L1=	200.0	L2=	200.0	L3=	20.0	L9=	0	L4=	2000	L5=	800	L6=	3	L0=	0	
#	L100=	101	L900=	0	L920=	0	L120=	0	L101=	0	L901=	0	L921=	0	L121=	0	
#	L102=	0	L902=	0	L922=	0	L122=	0	L103=	0	L903=	0	L923=	0	L123=	0	
#	L104=	0	L904=	0	L924=	0	L124=	0	L105=	0	L905=	0	L925=	0	L125=	0	
#	L106=	0	L906=	0	L926=	0	L126=	0	L107=	0	L907=	0	L927=	0	L127=	0	
#	L108=	0	L908=	0	L928=	0	L128=	0	L109=	0	L909=	0	L929=	0	L129=	0	
#	L110=	0	L910=	0	L930=	0	L130=	0	L111=	0	L911=	0	L931=	0	L131=	0	
#	L112=	0	L912=	0	L932=	0	L132=	0	L113=	0	L913=	0	L933=	0	L133=	0	
#	L114=	0	L914=	0	L934=	0	L134=	0	L115=	0	L915=	0	L935=	0	L135=	0	
#	L116=	0	L916=	0	L936=	0	L136=	0	L117=	0	L917=	0	L937=	0	L137=	0	
#	L118=	0	L918=	0	L938=	0	L138=	0	L119=	9900	L919=	0	L939=	0	L139=	0	
#	G0$0							
#	G77H9950	
%101.0		
N10	#2000	(FRAESER:START-POS.)	
#	L140=	0	L141=	0	L142=	-10	L143=	1	L144=	102	L145=	12000	L146=	2000	L147=	1	L148=	0	
#	G77H9956	
%102.0		
#2	
N210	#851	(ISO)		G90		XY	ZL112					
N220	#851	(ISO)		G0		X81.58		Y80.67					
N230	#851	(ISO)		G1		Z-4.00		F800			
N240	#851	(ISO)		G1		X83.24		Y82.33							
N250	#851	(ISO)		G1		X81.58		Y83.99							
N260	#851	(ISO)		G1		X83.24		Y82.33							
N270	#851	(ISO)		G1		X86.43									
N280	#851	(ISO)		G1		X88.10		Y83.99							
N290	#851	(ISO)		G1		X86.43		Y82.33							
N300	#851	(ISO)		G1		X88.10		Y80.67							
N310	#851	(ISO)		G1		X86.43		Y82.33							
N320	#851	(ISO)		G1		X83.24									
N330	#851	(ISO)		G1		X81.58		Y80.67							
N340	#851	(ISO)		G1		X75.50		Y74.59							
N350	#851	(ISO)		G1		X73.58		Y72.67							
N360	#851	(ISO)		G1		X75.50		Y74.59							
N370	#851	(ISO)		G1				Y90.07							
N380	#851	(ISO)		G1		X73.58		Y91.99							
N390	#851	(ISO)		G1		X75.50		Y90.07							
N400	#851	(ISO)		G1		X94.18									
N410	#851	(ISO)		G1		X96.10		Y91.99							
N420	#851	(ISO)		G1		X94.18		Y90.07							
N430	#851	(ISO)		G1				Y74.59							
N440	#851	(ISO)		G1		X96.10		Y72.67							
N450	#851	(ISO)		G1		X94.18		Y74.59							
N460	#851	(ISO)		G1		X75.50									
N470	#851	(ISO)		G1		X67.50		Y66.59							
N480	#851	(ISO)		G1		X65.58		Y64.67							
N490	#851	(ISO)		G1		X67.50		Y66.59							
N500	#851	(ISO)		G1				Y98.07							
N510	#851	(ISO)		G1		X65.58		Y99.99							
N520	#851	(ISO)		G1		X67.50		Y98.07							
N530	#851	(ISO)		G1		X102.18									
N540	#851	(ISO)		G1		X104.10		Y99.99							
N550	#851	(ISO)		G1		X102.18		Y98.07							
N560	#851	(ISO)		G1				Y66.59							
N570	#851	(ISO)		G1		X104.10		Y64.67							
N580	#851	(ISO)		G1		X102.18		Y66.59							
N590	#851	(ISO)		G1		X67.50									
N600	#851	(ISO)		G1		X59.50		Y58.59							
N610	#851	(ISO)		G1		X57.58		Y56.67							
N620	#851	(ISO)		G1		X59.50		Y58.59							
N630	#851	(ISO)		G1				Y106.07							
N640	#851	(ISO)		G1		X57.58		Y107.99							
N650	#851	(ISO)		G1		X59.50		Y106.07							
N660	#851	(ISO)		G1		X110.18									
N670	#851	(ISO)		G1		X112.10		Y107.99							
N680	#851	(ISO)		G1		X110.18		Y106.07							
N690	#851	(ISO)		G1				Y58.59							
N700	#851	(ISO)		G1		X112.10		Y56.67							
N710	#851	(ISO)		G1		X110.18		Y58.59							
N720	#851	(ISO)		G1		X59.50									
N730	#851	(ISO)		G1		X51.50		Y50.59							
N740	#851	(ISO)		G1		X49.58		Y48.67							
N750	#851	(ISO)		G1		X51.50		Y50.59							
N760	#851	(ISO)		G1				Y114.07							
N770	#851	(ISO)		G1		X49.58		Y115.99							
N780	#851	(ISO)		G1		X51.50		Y114.07							
N790	#851	(ISO)		G1		X118.18									
N800	#851	(ISO)		G1		X120.10		Y115.99							
N810	#851	(ISO)		G1		X118.18		Y114.07							
N820	#851	(ISO)		G1				Y50.59							
N830	#851	(ISO)		G1		X120.10		Y48.67							
N840	#851	(ISO)		G1		X118.18		Y50.59							
N850	#851	(ISO)		G1		X51.50									
N860	#851	(ISO)		G1		X43.50		Y42.59							
N870	#851	(ISO)		G1		X41.58		Y40.67							
N880	#851	(ISO)		G1		X43.50		Y42.59							
N890	#851	(ISO)		G1				Y122.07							
N900	#851	(ISO)		G1		X41.58		Y123.99							
N910	#851	(ISO)		G1		X43.50		Y122.07							
N920	#851	(ISO)		G1		X126.18									
N930	#851	(ISO)		G1		X128.10		Y123.99							
N940	#851	(ISO)		G1		X126.18		Y122.07							
N950	#851	(ISO)		G1				Y42.59							
N960	#851	(ISO)		G1		X128.10		Y40.67							
N970	#851	(ISO)		G1		X126.18		Y42.59							
N980	#851	(ISO)		G1		X43.50									
N990	#851	(ISO)		G1		X35.50		Y34.59							
N1000	#851	(ISO)		G1				Y130.07							
N1010	#851	(ISO)		G1		X134.18									
N1020	#851	(ISO)		G1				Y34.59							
N1030	#851	(ISO)		G1		X35.50									
N1040	#851	(ISO)		G1		X27.50									
N1050	#851	(ISO)		G1				Y130.07							
N1060	#851	(ISO)		G2		X35.50		Y138.07		I35.50		J130.07					
N1070	#851	(ISO)		G1		X134.18									
N1080	#851	(ISO)		G2		X142.18		Y130.07		I134.18		J130.07					
N1090	#851	(ISO)		G1				Y34.59							
N1100	#851	(ISO)		G2		X134.18		Y26.59		I134.18		J34.59					
N1110	#851	(ISO)		G1		X35.50									
N1120	#851	(ISO)		G2		X27.50		Y34.59		I35.50		J34.59					
N1130	#851	(ISO)		G1		X19.50									
N1140	#851	(ISO)		G1				Y130.07							
N1150	#851	(ISO)		G2		X35.50		Y146.07		I35.50		J130.07					
N1160	#851	(ISO)		G1		X134.18									
N1170	#851	(ISO)		G2		X150.18		Y130.07		I134.18		J130.07					
N1180	#851	(ISO)		G1				Y34.59							
N1190	#851	(ISO)		G2		X134.18		Y18.59		I134.18		J34.59					
N1200	#851	(ISO)		G1		X35.50									
N1210	#851	(ISO)		G2		X19.50		Y34.59		I35.50		J34.59					
N1220	#851	(ISO)		G1		X11.50									
N1230	#851	(ISO)		G1				Y130.07							
N1240	#851	(ISO)		G2		X35.50		Y154.07		I35.50		J130.07					
N1250	#851	(ISO)		G1		X134.18									
N1260	#851	(ISO)		G2		X158.18		Y130.07		I134.18		J130.07					
N1270	#851	(ISO)		G1				Y34.59							
N1280	#851	(ISO)		G2		X134.18		Y10.59		I134.18		J34.59					
N1290	#851	(ISO)		G1		X35.50									
N1300	#851	(ISO)		G2		X11.50		Y34.59		I35.50		J34.59					
N1310	#851	(ISO)		G0						Z5.00					
N1320	#851	(ISO)		G0		X81.58		Y80.67							
N1330	#851	(ISO)		G1		Z-8.00		F800			
N1340	#851	(ISO)		G1		X83.24		Y82.33							
N1350	#851	(ISO)		G1		X81.58		Y83.99							
N1360	#851	(ISO)		G1		X83.24		Y82.33							
N1370	#851	(ISO)		G1		X86.43									
N1380	#851	(ISO)		G1		X88.10		Y83.99							
N1390	#851	(ISO)		G1		X86.43		Y82.33							
N1400	#851	(ISO)		G1		X88.10		Y80.67							
N1410	#851	(ISO)		G1		X86.43		Y82.33							
N1420	#851	(ISO)		G1		X83.24									
N1430	#851	(ISO)		G1		X81.58		Y80.67							
N1440	#851	(ISO)		G1		X75.50		Y74.59							
N1450	#851	(ISO)		G1		X73.58		Y72.67							
N1460	#851	(ISO)		G1		X75.50		Y74.59							
N1470	#851	(ISO)		G1				Y90.07							
N1480	#851	(ISO)		G1		X73.58		Y91.99							
N1490	#851	(ISO)		G1		X75.50		Y90.07							
N1500	#851	(ISO)		G1		X94.18									
N1510	#851	(ISO)		G1		X96.10		Y91.99							
N1520	#851	(ISO)		G1		X94.18		Y90.07							
N1530	#851	(ISO)		G1				Y74.59							
N1540	#851	(ISO)		G1		X96.10		Y72.67							
N1550	#851	(ISO)		G1		X94.18		Y74.59							
N1560	#851	(ISO)		G1		X75.50									
N1570	#851	(ISO)		G1		X67.50		Y66.59							
N1580	#851	(ISO)		G1		X65.58		Y64.67							
N1590	#851	(ISO)		G1		X67.50		Y66.59							
N1600	#851	(ISO)		G1				Y98.07							
N1610	#851	(ISO)		G1		X65.58		Y99.99							
N1620	#851	(ISO)		G1		X67.50		Y98.07							
N1630	#851	(ISO)		G1		X102.18									
N1640	#851	(ISO)		G1		X104.10		Y99.99							
N1650	#851	(ISO)		G1		X102.18		Y98.07							
N1660	#851	(ISO)		G1				Y66.59							
N1670	#851	(ISO)		G1		X104.10		Y64.67							
N1680	#851	(ISO)		G1		X102.18		Y66.59							
N1690	#851	(ISO)		G1		X67.50									
N1700	#851	(ISO)		G1		X59.50		Y58.59							
N1710	#851	(ISO)		G1		X57.58		Y56.67							
N1720	#851	(ISO)		G1		X59.50		Y58.59							
N1730	#851	(ISO)		G1				Y106.07							
N1740	#851	(ISO)		G1		X57.58		Y107.99							
N1750	#851	(ISO)		G1		X59.50		Y106.07							
N1760	#851	(ISO)		G1		X110.18									
N1770	#851	(ISO)		G1		X112.10		Y107.99							
N1780	#851	(ISO)		G1		X110.18		Y106.07							
N1790	#851	(ISO)		G1				Y58.59							
N1800	#851	(ISO)		G1		X112.10		Y56.67							
N1810	#851	(ISO)		G1		X110.18		Y58.59							
N1820	#851	(ISO)		G1		X59.50									
N1830	#851	(ISO)		G1		X51.50		Y50.59							
N1840	#851	(ISO)		G1		X49.58		Y48.67							
N1850	#851	(ISO)		G1		X51.50		Y50.59							
N1860	#851	(ISO)		G1				Y114.07							
N1870	#851	(ISO)		G1		X49.58		Y115.99							
N1880	#851	(ISO)		G1		X51.50		Y114.07							
N1890	#851	(ISO)		G1		X118.18									
N1900	#851	(ISO)		G1		X120.10		Y115.99							
N1910	#851	(ISO)		G1		X118.18		Y114.07							
N1920	#851	(ISO)		G1				Y50.59							
N1930	#851	(ISO)		G1		X120.10		Y48.67							
N1940	#851	(ISO)		G1		X118.18		Y50.59							
N1950	#851	(ISO)		G1		X51.50									
N1960	#851	(ISO)		G1		X43.50		Y42.59							
N1970	#851	(ISO)		G1		X41.58		Y40.67							
N1980	#851	(ISO)		G1		X43.50		Y42.59							
N1990	#851	(ISO)		G1				Y122.07							
N2000	#851	(ISO)		G1		X41.58		Y123.99							
N2010	#851	(ISO)		G1		X43.50		Y122.07							
N2020	#851	(ISO)		G1		X126.18									
N2030	#851	(ISO)		G1		X128.10		Y123.99							
N2040	#851	(ISO)		G1		X126.18		Y122.07							
N2050	#851	(ISO)		G1				Y42.59							
N2060	#851	(ISO)		G1		X128.10		Y40.67							
N2070	#851	(ISO)		G1		X126.18		Y42.59							
N2080	#851	(ISO)		G1		X43.50									
N2090	#851	(ISO)		G1		X35.50		Y34.59							
N2100	#851	(ISO)		G1				Y130.07							
N2110	#851	(ISO)		G1		X134.18									
N2120	#851	(ISO)		G1				Y34.59							
N2130	#851	(ISO)		G1		X35.50									
N2140	#851	(ISO)		G1		X27.50									
N2150	#851	(ISO)		G1				Y130.07							
N2160	#851	(ISO)		G2		X35.50		Y138.07		I35.50		J130.07					
N2170	#851	(ISO)		G1		X134.18									
N2180	#851	(ISO)		G2		X142.18		Y130.07		I134.18		J130.07					
N2190	#851	(ISO)		G1				Y34.59							
N2200	#851	(ISO)		G2		X134.18		Y26.59		I134.18		J34.59					
N2210	#851	(ISO)		G1		X35.50									
N2220	#851	(ISO)		G2		X27.50		Y34.59		I35.50		J34.59					
N2230	#851	(ISO)		G1		X19.50									
N2240	#851	(ISO)		G1				Y130.07							
N2250	#851	(ISO)		G2		X35.50		Y146.07		I35.50		J130.07					
N2260	#851	(ISO)		G1		X134.18									
N2270	#851	(ISO)		G2		X150.18		Y130.07		I134.18		J130.07					
N2280	#851	(ISO)		G1				Y34.59							
N2290	#851	(ISO)		G2		X134.18		Y18.59		I134.18		J34.59					
N2300	#851	(ISO)		G1		X35.50									
N2310	#851	(ISO)		G2		X19.50		Y34.59		I35.50		J34.59					
N2320	#851	(ISO)		G1		X11.50									
N2330	#851	(ISO)		G1				Y130.07							
N2340	#851	(ISO)		G2		X35.50		Y154.07		I35.50		J130.07					
N2350	#851	(ISO)		G1		X134.18									
N2360	#851	(ISO)		G2		X158.18		Y130.07		I134.18		J130.07					
N2370	#851	(ISO)		G1				Y34.59							
N2380	#851	(ISO)		G2		X134.18		Y10.59		I134.18		J34.59					
N2390	#851	(ISO)		G1		X35.50									
N2400	#851	(ISO)		G2		X11.50		Y34.59		I35.50		J34.59					
N2410	#851	(ISO)		G0						Z5.00					
N2420	#851	(ISO)		G0		X81.58		Y80.67							
N2430	#851	(ISO)		G1		Z-12.00		F800			
N2440	#851	(ISO)		G1		X83.24		Y82.33							
N2450	#851	(ISO)		G1		X81.58		Y83.99							
N2460	#851	(ISO)		G1		X83.24		Y82.33							
N2470	#851	(ISO)		G1		X86.43									
N2480	#851	(ISO)		G1		X88.10		Y83.99							
N2490	#851	(ISO)		G1		X86.43		Y82.33							
N2500	#851	(ISO)		G1		X88.10		Y80.67							
N2510	#851	(ISO)		G1		X86.43		Y82.33							
N2520	#851	(ISO)		G1		X83.24									
N2530	#851	(ISO)		G1		X81.58		Y80.67							
N2540	#851	(ISO)		G1		X75.50		Y74.59							
N2550	#851	(ISO)		G1		X73.58		Y72.67							
N2560	#851	(ISO)		G1		X75.50		Y74.59							
N2570	#851	(ISO)		G1				Y90.07							
N2580	#851	(ISO)		G1		X73.58		Y91.99							
N2590	#851	(ISO)		G1		X75.50		Y90.07							
N2600	#851	(ISO)		G1		X94.18									
N2610	#851	(ISO)		G1		X96.10		Y91.99							
N2620	#851	(ISO)		G1		X94.18		Y90.07							
N2630	#851	(ISO)		G1				Y74.59							
N2640	#851	(ISO)		G1		X96.10		Y72.67							
N2650	#851	(ISO)		G1		X94.18		Y74.59							
N2660	#851	(ISO)		G1		X75.50									
N2670	#851	(ISO)		G1		X67.50		Y66.59							
N2680	#851	(ISO)		G1		X65.58		Y64.67							
N2690	#851	(ISO)		G1		X67.50		Y66.59							
N2700	#851	(ISO)		G1				Y98.07							
N2710	#851	(ISO)		G1		X65.58		Y99.99							
N2720	#851	(ISO)		G1		X67.50		Y98.07							
N2730	#851	(ISO)		G1		X102.18									
N2740	#851	(ISO)		G1		X104.10		Y99.99							
N2750	#851	(ISO)		G1		X102.18		Y98.07							
N2760	#851	(ISO)		G1				Y66.59							
N2770	#851	(ISO)		G1		X104.10		Y64.67							
N2780	#851	(ISO)		G1		X102.18		Y66.59							
N2790	#851	(ISO)		G1		X67.50									
N2800	#851	(ISO)		G1		X59.50		Y58.59							
N2810	#851	(ISO)		G1		X57.58		Y56.67							
N2820	#851	(ISO)		G1		X59.50		Y58.59							
N2830	#851	(ISO)		G1				Y106.07							
N2840	#851	(ISO)		G1		X57.58		Y107.99							
N2850	#851	(ISO)		G1		X59.50		Y106.07							
N2860	#851	(ISO)		G1		X110.18									
N2870	#851	(ISO)		G1		X112.10		Y107.99							
N2880	#851	(ISO)		G1		X110.18		Y106.07							
N2890	#851	(ISO)		G1				Y58.59							
N2900	#851	(ISO)		G1		X112.10		Y56.67							
N2910	#851	(ISO)		G1		X110.18		Y58.59							
N2920	#851	(ISO)		G1		X59.50									
N2930	#851	(ISO)		G1		X51.50		Y50.59							
N2940	#851	(ISO)		G1		X49.58		Y48.67							
N2950	#851	(ISO)		G1		X51.50		Y50.59							
N2960	#851	(ISO)		G1				Y114.07							
N2970	#851	(ISO)		G1		X49.58		Y115.99							
N2980	#851	(ISO)		G1		X51.50		Y114.07							
N2990	#851	(ISO)		G1		X118.18									
N3000	#851	(ISO)		G1		X120.10		Y115.99							
N3010	#851	(ISO)		G1		X118.18		Y114.07							
N3020	#851	(ISO)		G1				Y50.59							
N3030	#851	(ISO)		G1		X120.10		Y48.67							
N3040	#851	(ISO)		G1		X118.18		Y50.59							
N3050	#851	(ISO)		G1		X51.50									
N3060	#851	(ISO)		G1		X43.50		Y42.59							
N3070	#851	(ISO)		G1		X41.58		Y40.67							
N3080	#851	(ISO)		G1		X43.50		Y42.59							
N3090	#851	(ISO)		G1				Y122.07							
N3100	#851	(ISO)		G1		X41.58		Y123.99							
N3110	#851	(ISO)		G1		X43.50		Y122.07							
N3120	#851	(ISO)		G1		X126.18									
N3130	#851	(ISO)		G1		X128.10		Y123.99							
N3140	#851	(ISO)		G1		X126.18		Y122.07							
N3150	#851	(ISO)		G1				Y42.59							
N3160	#851	(ISO)		G1		X128.10		Y40.67							
N3170	#851	(ISO)		G1		X126.18		Y42.59							
N3180	#851	(ISO)		G1		X43.50									
N3190	#851	(ISO)		G1		X35.50		Y34.59							
N3200	#851	(ISO)		G1				Y130.07							
N3210	#851	(ISO)		G1		X134.18									
N3220	#851	(ISO)		G1				Y34.59							
N3230	#851	(ISO)		G1		X35.50									
N3240	#851	(ISO)		G1		X27.50									
N3250	#851	(ISO)		G1				Y130.07							
N3260	#851	(ISO)		G2		X35.50		Y138.07		I35.50		J130.07					
N3270	#851	(ISO)		G1		X134.18									
N3280	#851	(ISO)		G2		X142.18		Y130.07		I134.18		J130.07					
N3290	#851	(ISO)		G1				Y34.59							
N3300	#851	(ISO)		G2		X134.18		Y26.59		I134.18		J34.59					
N3310	#851	(ISO)		G1		X35.50									
N3320	#851	(ISO)		G2		X27.50		Y34.59		I35.50		J34.59					
N3330	#851	(ISO)		G1		X19.50									
N3340	#851	(ISO)		G1				Y130.07							
N3350	#851	(ISO)		G2		X35.50		Y146.07		I35.50		J130.07					
N3360	#851	(ISO)		G1		X134.18									
N3370	#851	(ISO)		G2		X150.18		Y130.07		I134.18		J130.07					
N3380	#851	(ISO)		G1				Y34.59							
N3390	#851	(ISO)		G2		X134.18		Y18.59		I134.18		J34.59					
N3400	#851	(ISO)		G1		X35.50									
N3410	#851	(ISO)		G2		X19.50		Y34.59		I35.50		J34.59					
N3420	#851	(ISO)		G1		X11.50									
N3430	#851	(ISO)		G1				Y130.07							
N3440	#851	(ISO)		G2		X35.50		Y154.07		I35.50		J130.07					
N3450	#851	(ISO)		G1		X134.18									
N3460	#851	(ISO)		G2		X158.18		Y130.07		I134.18		J130.07					
N3470	#851	(ISO)		G1				Y34.59							
N3480	#851	(ISO)		G2		X134.18		Y10.59		I134.18		J34.59					
N3490	#851	(ISO)		G1		X35.50									
N3500	#851	(ISO)		G2		X11.50		Y34.59		I35.50		J34.59					
N3510	#851	(ISO)		G0						Z5.00					
N3520	#851	(ISO)		G0		X81.58		Y80.67							
N3530	#851	(ISO)		G1		Z-16.00		F800			
N3540	#851	(ISO)		G1		X83.24		Y82.33							
N3550	#851	(ISO)		G1		X81.58		Y83.99							
N3560	#851	(ISO)		G1		X83.24		Y82.33							
N3570	#851	(ISO)		G1		X86.43									
N3580	#851	(ISO)		G1		X88.10		Y83.99							
N3590	#851	(ISO)		G1		X86.43		Y82.33							
N3600	#851	(ISO)		G1		X88.10		Y80.67							
N3610	#851	(ISO)		G1		X86.43		Y82.33							
N3620	#851	(ISO)		G1		X83.24									
N3630	#851	(ISO)		G1		X81.58		Y80.67							
N3640	#851	(ISO)		G1		X75.50		Y74.59							
N3650	#851	(ISO)		G1		X73.58		Y72.67							
N3660	#851	(ISO)		G1		X75.50		Y74.59							
N3670	#851	(ISO)		G1				Y90.07							
N3680	#851	(ISO)		G1		X73.58		Y91.99							
N3690	#851	(ISO)		G1		X75.50		Y90.07							
N3700	#851	(ISO)		G1		X94.18									
N3710	#851	(ISO)		G1		X96.10		Y91.99							
N3720	#851	(ISO)		G1		X94.18		Y90.07							
N3730	#851	(ISO)		G1				Y74.59							
N3740	#851	(ISO)		G1		X96.10		Y72.67							
N3750	#851	(ISO)		G1		X94.18		Y74.59							
N3760	#851	(ISO)		G1		X75.50									
N3770	#851	(ISO)		G1		X67.50		Y66.59							
N3780	#851	(ISO)		G1		X65.58		Y64.67							
N3790	#851	(ISO)		G1		X67.50		Y66.59							
N3800	#851	(ISO)		G1				Y98.07							
N3810	#851	(ISO)		G1		X65.58		Y99.99							
N3820	#851	(ISO)		G1		X67.50		Y98.07							
N3830	#851	(ISO)		G1		X102.18									
N3840	#851	(ISO)		G1		X104.10		Y99.99							
N3850	#851	(ISO)		G1		X102.18		Y98.07							
N3860	#851	(ISO)		G1				Y66.59							
N3870	#851	(ISO)		G1		X104.10		Y64.67							
N3880	#851	(ISO)		G1		X102.18		Y66.59							
N3890	#851	(ISO)		G1		X67.50									
N3900	#851	(ISO)		G1		X59.50		Y58.59							
N3910	#851	(ISO)		G1		X57.58		Y56.67							
N3920	#851	(ISO)		G1		X59.50		Y58.59							
N3930	#851	(ISO)		G1				Y106.07							
N3940	#851	(ISO)		G1		X57.58		Y107.99							
N3950	#851	(ISO)		G1		X59.50		Y106.07							
N3960	#851	(ISO)		G1		X110.18									
N3970	#851	(ISO)		G1		X112.10		Y107.99							
N3980	#851	(ISO)		G1		X110.18		Y106.07							
N3990	#851	(ISO)		G1				Y58.59							
N4000	#851	(ISO)		G1		X112.10		Y56.67							
N4010	#851	(ISO)		G1		X110.18		Y58.59							
N4020	#851	(ISO)		G1		X59.50									
N4030	#851	(ISO)		G1		X51.50		Y50.59							
N4040	#851	(ISO)		G1		X49.58		Y48.67							
N4050	#851	(ISO)		G1		X51.50		Y50.59							
N4060	#851	(ISO)		G1				Y114.07							
N4070	#851	(ISO)		G1		X49.58		Y115.99							
N4080	#851	(ISO)		G1		X51.50		Y114.07							
N4090	#851	(ISO)		G1		X118.18									
N4100	#851	(ISO)		G1		X120.10		Y115.99							
N4110	#851	(ISO)		G1		X118.18		Y114.07							
N4120	#851	(ISO)		G1				Y50.59							
N4130	#851	(ISO)		G1		X120.10		Y48.67							
N4140	#851	(ISO)		G1		X118.18		Y50.59							
N4150	#851	(ISO)		G1		X51.50									
N4160	#851	(ISO)		G1		X43.50		Y42.59							
N4170	#851	(ISO)		G1		X41.58		Y40.67							
N4180	#851	(ISO)		G1		X43.50		Y42.59							
N4190	#851	(ISO)		G1				Y122.07							
N4200	#851	(ISO)		G1		X41.58		Y123.99							
N4210	#851	(ISO)		G1		X43.50		Y122.07							
N4220	#851	(ISO)		G1		X126.18									
N4230	#851	(ISO)		G1		X128.10		Y123.99							
N4240	#851	(ISO)		G1		X126.18		Y122.07							
N4250	#851	(ISO)		G1				Y42.59							
N4260	#851	(ISO)		G1		X128.10		Y40.67							
N4270	#851	(ISO)		G1		X126.18		Y42.59							
N4280	#851	(ISO)		G1		X43.50									
N4290	#851	(ISO)		G1		X35.50		Y34.59							
N4300	#851	(ISO)		G1				Y130.07							
N4310	#851	(ISO)		G1		X134.18									
N4320	#851	(ISO)		G1				Y34.59							
N4330	#851	(ISO)		G1		X35.50									
N4340	#851	(ISO)		G1		X27.50									
N4350	#851	(ISO)		G1				Y130.07							
N4360	#851	(ISO)		G2		X35.50		Y138.07		I35.50		J130.07					
N4370	#851	(ISO)		G1		X134.18									
N4380	#851	(ISO)		G2		X142.18		Y130.07		I134.18		J130.07					
N4390	#851	(ISO)		G1				Y34.59							
N4400	#851	(ISO)		G2		X134.18		Y26.59		I134.18		J34.59					
N4410	#851	(ISO)		G1		X35.50									
N4420	#851	(ISO)		G2		X27.50		Y34.59		I35.50		J34.59					
N4430	#851	(ISO)		G1		X19.50									
N4440	#851	(ISO)		G1				Y130.07							
N4450	#851	(ISO)		G2		X35.50		Y146.07		I35.50		J130.07					
N4460	#851	(ISO)		G1		X134.18									
N4470	#851	(ISO)		G2		X150.18		Y130.07		I134.18		J130.07					
N4480	#851	(ISO)		G1				Y34.59							
N4490	#851	(ISO)		G2		X134.18		Y18.59		I134.18		J34.59					
N4500	#851	(ISO)		G1		X35.50									
N4510	#851	(ISO)		G2		X19.50		Y34.59		I35.50		J34.59					
N4520	#851	(ISO)		G1		X11.50									
N4530	#851	(ISO)		G1				Y130.07							
N4540	#851	(ISO)		G2		X35.50		Y154.07		I35.50		J130.07					
N4550	#851	(ISO)		G1		X134.18									
N4560	#851	(ISO)		G2		X158.18		Y130.07		I134.18		J130.07					
N4570	#851	(ISO)		G1				Y34.59							
N4580	#851	(ISO)		G2		X134.18		Y10.59		I134.18		J34.59					
N4590	#851	(ISO)		G1		X35.50									
N4600	#851	(ISO)		G2		X11.50		Y34.59		I35.50		J34.59					
N4610	#851	(ISO)		G0						Z5.00					
#3	


VBS, C oder C++ ich habe mich hierzu gestern etwas Informiert und es gibt eine menge unterschiedlicher Meinungen dazu. Was ist wirklich empfehlenswert zu erlernen? In Abhängigkeit der Anwendungen würde BATCH "vorerst" ausreichen.
C++ klingt sehr interessant!

Grüße

Jürgen
Mitglied: icsat
icsat 18.08.2010 um 12:58:05 Uhr
Goto Top
Zitat von @flipmode85:
Im Anhang ist eine weitere etwas größere Datei, die häufigkeit der Z-Werte ist sehr verschieden.
Ich finde maximal einen pro Zeile. Ist das richtig?

Zitat von @flipmode85:
addiert werden soll, lässt sich in Zeile 18 finden L142= -10 dieser kann sich verändern
Ist es immer der Wert hinter "L142=" in den Headerdaten?
Steht "L142=" immer an der dritten Stelle der betroffenen Zeile?
Ist der Wert immer negativ oder kann der auch positiv sein?

Zitat von @flipmode85:
VBS, C oder C++ ich habe mich hierzu gestern etwas Informiert und es gibt eine menge unterschiedlicher Meinungen dazu. Was ist
wirklich empfehlenswert zu erlernen? In Abhängigkeit der Anwendungen würde BATCH "vorerst" ausreichen.
C++ klingt sehr interessant!
Imho ist es empfehlenswert die Grundlagen der Programmierung zu verstehen. Die Sprache ist dann nur noch ein lernen von Vokabeln.
Die Frage ist eigentlich mehr, was für welchen Einsatzzweck sinnvoll ist.
Dabei würde ich für die Automatisierung von Jobabläufen auf Batch setzen.
Sind in den Jobabläufen Datenmanipulationen oder Dinge erforderlich, bei denen meine Batch-Kenntnisse an ihre Grenzen stoßen, nehme ich häufig VBS zur Unterstützung.
C++ würde ich dann eher zur Anwendungsentwicklung und weniger zum Steuern von Jobabläufen einsetzen.

Gruß icsat
Mitglied: icsat
icsat 18.08.2010 um 23:15:32 Uhr
Goto Top
Moin,

Du hast jetzt zwar viele Daten hier reinkopiert, aber leider nicht wirklich variantenreich. Es sind nur ein paar Z-Werte enthalten. Naja egal.

Hier noch mal ein etwas modifizierter Code:
:start
@echo off
setlocal EnableDelayedExpansion
set "gcode=C:\NC_NUM\DATA\GCODE"  
set "origin=C:\NC_NUM\DATA\ORIGIN"  
set "add=C:\NC_NUM\DATA\ADD"  
set "num=C:\NC_NUM\DATA\NUM"  

for /f %%a in ('dir /b %GCODE%\*.NUM') do (   
	REM Get copy in folders
	move %GCODE%\%%a %ORIGIN%\
	set "eingabe=%ORIGIN%\%%a"  
        set "ausgabe=%GCODE%\%%a  
	call :add
        copy !AUSGABE! %ADD%\
	call :crypt 
	move !AUSGABE! %NUM%\
)

:ende
endlocal
goto :eof 

:add
for /f "delims=Z tokens=1,2" %%i in (%EINGABE%) do (  
	set "zteil=%%j"  
	if "!ZTEIL!"=="" (  
		echo %%i>>%AUSGABE%
		for /f "tokens=6,7 delims==	 " %%n in ("%%i") do (  
			if "%%n"=="L142" (  
				set "wert=%%o"  
				for /f "tokens=1,2 delims=." %%p in ("%%o") do (  
					if "%%p" NEQ "" (  
						set addvk=%%p
					) else (
						set addvk=0
					)
					if "%%q" NEQ "" (  
						set addnk=%%q
						if "!ADDNK:~0,1!"=="0" set addnk=!ADDNK:~1,1!  
					) else (
						set addnk=0
					)
				)
			)
		)
	) else (
		if "!ZTEIL:~0,1!"=="-" (  
			for /f "tokens=1,2* delims=.	" %%k in ("!ZTEIL!") do (  
				set /a vk=%%k+!ADDVK!
				if %%l LEQ 99 (
					set startnk=%%l
					if "!STARTNK:~0,1!"=="0" set startnk=!STARTNK:~1,1!  
				) else (
					set startnk=0
				)
				if "!ADDVK:~0,1!" EQU "-" (  
					set /a nk=!STARTNK!+!ADDNK!
				) else (
					if !VK! LSS 0 set /a nk=!STARTNK!-!ADDNK!
					if !VK! GTR 0 set /a nk=!ADDNK!-!STARTNK!
					if !VK! EQU 0 (
						if !ADDNK! GEQ !STARTNK! (
							set /a nk=!ADDNK!-!STARTNK!
						) else (
							set /a nk=!STARTNK!-!ADDNK!
						)
					)
				)
				if !NK! GEQ 100 (
					if !VK! GEQ 0 (
						set /a vk+=1
					) else (
						set /a vk-=1
					)
					set /a nk-=100
				)
				if !NK! LSS 0 (
					if !VK! GEQ 0 (
						set /a vk-=1
					) else (
						set /a vk+=1
						if !VK! EQU 0 set "vk=-0"  
					)
					set /a nk+=100
				)
				if !NK! LSS 10 set "nk=0!NK!"  
				if "%%m"=="" (  
					echo %%iZ!VK!.!NK!					%%l>>%AUSGABE%
				) else (
					if "%%m" NEQ "" (  
						echo %%iZ!VK!.!NK!		%%m>>%AUSGABE%
					) else (
						echo %%iZ!VK!.!NK!					%%m>>%AUSGABE%
					)
				)
			)
		) else (
			echo %%iZ%%j>>%AUSGABE%
		)
	)
)

goto :eof

:crypt
CHG -i %AUSGABE% -s [15] -r [15]
CHG -i %AUSGABE% -s [19] -r [19]
CHG -i %AUSGABE% -s [32] -r [32]
CHG -i %AUSGABE% -s [35] -r [163]
CHG -i %AUSGABE% -s [37] -r [165]
CHG -i %AUSGABE% -s [40] -r [40]
CHG -i %AUSGABE% -s [41] -r [169]
CHG -i %AUSGABE% -s [44] -r [172]
CHG -i %AUSGABE% -s [45] -r [45]
CHG -i %AUSGABE% -s [49] -r [177]
CHG -i %AUSGABE% -s [50] -r [178]
CHG -i %AUSGABE% -s [51] -r [51]
CHG -i %AUSGABE% -s [52] -r [180]
CHG -i %AUSGABE% -s [53] -r [53]
CHG -i %AUSGABE% -s [54] -r [54]
CHG -i %AUSGABE% -s [55] -r [183]
CHG -i %AUSGABE% -s [56] -r [184]
CHG -i %AUSGABE% -s [57] -r [57]
CHG -i %AUSGABE% -s [60] -r [60]
CHG -i %AUSGABE% -s [61] -r [189]
CHG -i %AUSGABE% -s [62] -r [190]
CHG -i %AUSGABE% -s [65] -r [65]
CHG -i %AUSGABE% -s [66] -r [66]
CHG -i %AUSGABE% -s [67] -r [195]
CHG -i %AUSGABE% -s [68] -r [68]
CHG -i %AUSGABE% -s [69] -r [197]
CHG -i %AUSGABE% -s [70] -r [198]
CHG -i %AUSGABE% -s [71] -r [71]
CHG -i %AUSGABE% -s [72] -r [72]
CHG -i %AUSGABE% -s [73] -r [201]
CHG -i %AUSGABE% -s [74] -r [202]
CHG -i %AUSGABE% -s [76] -r [204]
CHG -i %AUSGABE% -s [77] -r [77]
CHG -i %AUSGABE% -s [78] -r [78]
CHG -i %AUSGABE% -s [79] -r [207]
CHG -i %AUSGABE% -s [80] -r [80]
CHG -i %AUSGABE% -s [81] -r [209]
CHG -i %AUSGABE% -s [82] -r [210]
CHG -i %AUSGABE% -s [83] -r [83]
CHG -i %AUSGABE% -s [84] -r [212]
CHG -i %AUSGABE% -s [85] -r [85]
CHG -i %AUSGABE% -s [86] -r [86]
CHG -i %AUSGABE% -s [87] -r [215]
CHG -i %AUSGABE% -s [88] -r [216]
CHG -i %AUSGABE% -s [89] -r [89]
CHG -i %AUSGABE% -s [90] -r [90]

goto :eof
Ich habe zwar etwas getestet, aber nur obeflächlich. Insbesondere bei den Rechenergebnissen bin ich mir nicht sicher, ob ich alle Eventualitäten abgedeckt habe.
Auch glaube ich nicht, dass Deine Testdaten alle Fälle abdecken. Daher wird bestimmt noch der ein oder andere Fehler bei Dir hochkommen.

[OT]
Leider fängt es an etwas unübersichtlich zu werden, da ich etwas schwer von Begriff bin und deshalb in jedem Deiner Posts neue Anforderungen finde.
Optimaler Weise gibt es vor der Realisierung soche Dinge wie Anforderungsanalyse, Konzeption und Design. Ist für Dein Problem natürlich etwas Oversized sich tagelang mit den Vorarbeiten zu befassen, aber etwas Zeit sollte da schon rein investiert werden. Die Zeit lohnt sich schon von daher, dass dieses später als Dokumentation dient oder zumindest die Grundlage dafür bildet.

Außerdem entwickelt sich das hier meiner Meinung nach gerade in die falsch Richtung. Ich helfe ja grundsätzlich gerne, wenn es anderen hilft sich dadurch in die Thematik einzuarbeiten.
Ich befürchte jedoch, dass ich hier in Ansätzen für Dich ein Firmenproblem löse ohne dass es für Dich vom Lernfaktor her einen hohen Wert hätte.

Das soll jetzt keine Kritik sein, sondern einfach nur eine Feststellung.
[/OT]

Gruß icsat
Mitglied: icsat
icsat 19.08.2010 um 06:22:48 Uhr
Goto Top
Dennoch würde ich gerne meine Überlegung VBS zu nutzen noch einmal aufgreifen wollen. Das Batch würde dann, schön übersichtlich, wie folgt aussehen:
:start
@echo off
setlocal EnableDelayedExpansion
set "gcode=C:\NC_NUM\DATA\GCODE"  
set "origin=C:\NC_NUM\DATA\ORIGIN"  
set "add=C:\NC_NUM\DATA\ADD"  
set "num=C:\NC_NUM\DATA\NUM"  

for /f %%a in ('dir /b %GCODE%\*.NUM') do (   
	REM Get copy in folders
	move %GCODE%\%%a %ORIGIN%\
	set "eingabe=%ORIGIN%\%%a"  
        set "ausgabe=%GCODE%\%%a  
	call add.vbs !EINGABE! !AUSGABE!
        copy !AUSGABE! %ADD%\
	call :crypt 
	move !AUSGABE! %NUM%\
)

:ende
endlocal
goto :eof 



:crypt
CHG -i %AUSGABE% -s [15] -r [15]
CHG -i %AUSGABE% -s [19] -r [19]
CHG -i %AUSGABE% -s [32] -r [32]
CHG -i %AUSGABE% -s [35] -r [163]
CHG -i %AUSGABE% -s [37] -r [165]
CHG -i %AUSGABE% -s [40] -r [40]
CHG -i %AUSGABE% -s [41] -r [169]
CHG -i %AUSGABE% -s [44] -r [172]
CHG -i %AUSGABE% -s [45] -r [45]
CHG -i %AUSGABE% -s [49] -r [177]
CHG -i %AUSGABE% -s [50] -r [178]
CHG -i %AUSGABE% -s [51] -r [51]
CHG -i %AUSGABE% -s [52] -r [180]
CHG -i %AUSGABE% -s [53] -r [53]
CHG -i %AUSGABE% -s [54] -r [54]
CHG -i %AUSGABE% -s [55] -r [183]
CHG -i %AUSGABE% -s [56] -r [184]
CHG -i %AUSGABE% -s [57] -r [57]
CHG -i %AUSGABE% -s [60] -r [60]
CHG -i %AUSGABE% -s [61] -r [189]
CHG -i %AUSGABE% -s [62] -r [190]
CHG -i %AUSGABE% -s [65] -r [65]
CHG -i %AUSGABE% -s [66] -r [66]
CHG -i %AUSGABE% -s [67] -r [195]
CHG -i %AUSGABE% -s [68] -r [68]
CHG -i %AUSGABE% -s [69] -r [197]
CHG -i %AUSGABE% -s [70] -r [198]
CHG -i %AUSGABE% -s [71] -r [71]
CHG -i %AUSGABE% -s [72] -r [72]
CHG -i %AUSGABE% -s [73] -r [201]
CHG -i %AUSGABE% -s [74] -r [202]
CHG -i %AUSGABE% -s [76] -r [204]
CHG -i %AUSGABE% -s [77] -r [77]
CHG -i %AUSGABE% -s [78] -r [78]
CHG -i %AUSGABE% -s [79] -r [207]
CHG -i %AUSGABE% -s [80] -r [80]
CHG -i %AUSGABE% -s [81] -r [209]
CHG -i %AUSGABE% -s [82] -r [210]
CHG -i %AUSGABE% -s [83] -r [83]
CHG -i %AUSGABE% -s [84] -r [212]
CHG -i %AUSGABE% -s [85] -r [85]
CHG -i %AUSGABE% -s [86] -r [86]
CHG -i %AUSGABE% -s [87] -r [215]
CHG -i %AUSGABE% -s [88] -r [216]
CHG -i %AUSGABE% -s [89] -r [89]
CHG -i %AUSGABE% -s [90] -r [90]

goto :eof

Und das "add.vbs":
'Übergabeparameter zuweisen  
set objParameter = Wscript.Arguments
strEingabe = objParameter(0)
strAusgabe = objParameter(1)

'Dateien Öffnen  
set objFSO = CreateObject("Scripting.FileSystemObject")  

set fEingabe = objFSO.OpenTextFile(strEingabe)
set fAusgabe = objFSO.OpenTextFile(strAusgabe, 2, True)

'Wert zum addieren Initialisieren  
strADD = ""  

'Schleifen bis zum Dateiende  
Do Until fEingabe.AtEndOfStream
	'Datensatz lesen  
	strInput = fEingabe.ReadLine
	
	'Output Initialisieren  
	strOutput = ""  
	
	'Beginnt die Zeile mit # suchen wir nach L142 ansonsten nach Z-  
	if mid(strInput,1,1)="#" Then  
		for i=1 to len(strInput)-1
			'Gleichheitszeichen suchen  
			if mid(strInput, i, 1) = "=" Then  
				'Prüfen ob vor dem Gleichheitszeichen L142 steht  
				if mid(strInput, i-4, 4) = "L142" Then  
					for j=i+2 to len(strInput)-1
						'Nächsten TAB suchen  
						if mid(strInput, j, 1) = "	" Then  
							'Wert zu addieren festlegen, falls das noch nicht geschenen ist  
							If strADD = "" Then  
								strADD = mid(strInput, i+2, j-(i+2))
								'Dezimalpunkt durch Komma ersetzen  
								strADD = replace(strADD, ".", ",")  
							end if
						end if
					next
				end if
			end if
		next
		'Orginal Zeile für Ausgabe übergeben  
		strOutput = strInput
	else
		for i=1 to len(strInput)-1
			'Ursprungswert Initialisieren  
			strUrwert = ""  
			'nach Z- suchen  
			if mid(strInput, i, 2) = "Z-" Then  
				for j=i+1 to len(strInput)-1
					'Nächsten TAB suchen  
					if mid(strInput, j, 1) = "	" Then  
						'Ursprungswert festlegen, falls das noch nicht geschenen ist  
						If strUrwert = "" Then  
							strUrwert = mid(strInput, i+1, j-(i+1))
							'Dezimalpunkt durch Komma ersetzen  
							strUrwert = replace(strUrwert, ".", ",")  
							'Neuen Wert berechnen  
							strNeuwert = cDbl(strUrwert) + cDbl(strADD)
							'Wert Formatieren  
							strNeuwert = FormatNumber(strNeuwert,2)
							'Komma durch Dezimalpunkt ersetzen  
							strNeuwert = replace(strNeuwert, ",", ".")  
							'Ausgabe zusammenbauen  
							if strOutput = "" Then  
								strOutput = mid(strInput, 1, i) & strNeuwert
								intSatzzeiger = i+1+(j-(i+1))+1
							else
								strOutput = strOutput & mid(strInput, intSatzzeiger, (i+1 - intSatzzeiger)) & strNeuwert
								intSatzzeiger = i+1+(j-(i+1))+1
							end if
						end if
					end if
				next
			end if
		next
		'Wurde der Output nicht gesetzt wird die Originalzeile für die Ausgabe übergeben	  
		If strOutput = "" Then  
			strOutput = strInput
		else
			strOutput = strOutput & mid(strInput, intSatzzeiger)
		end if
	end if
	
	'Zeile Ausgeben  
	fAusgabe.WriteLine strOutput
	
Loop

'Dateien schließen  
fEingabe.Close
fAusgabe.Close

'Objekte löschen  
set objFSO = NOthing

'Script beenden  
Wscript.Quit(0)

Denke es ist etwas übersichtlicher als das reine Batch und soll zeigen, dass Batch in meinen Augen nicht immer erste Wahl ist.
Außerdem bekommst Du hiermit nun schon einmal einen Eindruck von den Unterschieden zwischen Batch und vbScript. Ich verzichte aber jetzt darauf Dir auch noch eine C oder c++ Lösung zu präsentieren.

Aber die Frage war ja ursprünglich:
Zitat von @flipmode85:
Meine Frage hierzu: Ist es besser eine weitere *.bat Datei anzulegen in welcher meine "Wünsche" abgelegt werden, oder kann dies direkt in die crypt.bat mit aufgenommen werden? Ist das ganze üerhaupt machbar?

Daher ist dieser Post eigentlich OffTopic. Sorry. Ach, egal. Ich wünsche eine ruhige Restwoche.


Gruß icsat
Mitglied: flipmode85
flipmode85 19.08.2010 um 10:14:52 Uhr
Goto Top
Hallo icsat,


bei dieser Aufgabenstellung handelt es sich nicht um eine Lösung für eine Firma oder Unternehmen. Ich habe es mir selst zum Ziel gesetzt solche Aufgaben zu lösen. Beruflich habe ich nicht im geringsten damit zu tun! Seit meinem 10. Lebensjahr habe ich ununterbrochen mit Computer zu tun gehabt. Mein erster PC war ein IBM X386 mit DOS 4.0. In erster Linie hatte ich mich damals dafür interessiert, was für Bewegung sorgt, Abläufe, kleine Spiele und das erlernen der Technik.

Seit Windows 98 hatte ich nicht mehr mit DOS-Anwendungen zu tun, bis vor 5 Wochen! Ein Freund bat mich um Hilfe - eines seiner doch sehr alten Programme auf seinem WindowsXP-Rechner auszuführen. Mit VirtualPC und einem DOS6.0 - Image hatte ich es geschafft die Anwendung zu starten und konnte mich wie aus dem nichts, an doch soviele DOS-Befehle erinnern. Da die Anwendung noch nicht wirklich seine Dienste erfüllte, müsste eine BATCH-Datei erstellt werden, welche Zeichenfolgen abändert - damit begann im Grunde mein interesse an BATCH.

VBS scheint auch eine sehr interessante Technik zu sein um solche Aufgaben zu lösen.

Zurück zum Thema:

Die häufigkeit der Z-Werte ist je nach Anwendung sehr unterschiedlich. Die Ausgabe kann in jeder Zeile erfolgen, sofern sich alle 3-Achsen gleichzeitig Bewegen müssen, dies ist allerdings selten der Fall. Ich werde Deine Lösung heute Testen und werde Berichten.

Welches Buch ist nun für C bzw. C++ zu empfehlen, der Wissenshunger ist groß und die 14-Tage Urlaub sollten bereits teilweise dazu genutzt werden um etwas zu lernen!

Jürgen