bigsanch
Goto Top

Scriptdatei komprimieren

Hallo

Ich bin USER erfahren, was BATCH anbelangt, also nicht blöd und lernfähig, aber nicht besonders gut, da ich es auch doch etwas seltener brauche.
Habe zum Thema BATCH schreiben, meist auf dieser Seite die besten Ansätze zum weiterkommen erlagt, daher schreib ich nun hier mal eine Frage,
da ich mal nicht weiter komme, trotz aufwändiger Suche und Google Suche.

Ich Programme Scripts in jeglicher Form für Spiele, bzw deren Addons und eigene Addons. Die momentanen Scripts die ich schreibe sind in LUA.
Die Scripts die ich schreibe, schreibe ich zum testen und dann ändern in einer übersichtlichen Formatierung wie zB:

function irgendwas(
    x=0
    if (x=5) then
        irgendwas.soll=passieren.hier()
    else
        wasandres.soll=passieren.hier()
    end
end

So bekomme ich es per Debug Zeilennummer auch besser hin, es zu ändern.
Wenn nun aber ein Script fertig ist, möchte ich es komprimieren und ändere gewisse Strings in etwas vereinfachte Strings und entferne Leerzeilen und komprimiere
der Endübersicht einfachheitshalber einige Funktionen in Einzeiler. Das alles zur zeit per Hand und NP++ Funktion.

Jetzt wollt ich mir eine Batch Datei schreiben, welche dies in Zukunft für mich macht und hab ein einfaches "qwert" auswechseln zu "trewq" hinbekommen.
Auch Leerzeilen entfernen und einfache Strings ändern bekomm ich hin. Nun zu meinem Problem, was ich nicht hinbekomme:

Ich will eine Abfrage starten, welche den Code an gewissen Stellen zusammenfügt, wobei dabei die Suche zum beispiel einen Zeilenumbruch erkennen sollte.
Beispiel:
ÄNDERE
    if (x=5) then
        irgendwas.soll=passieren.hier()
IN
    if (x=5) then irgendwas.soll=passieren.hier()

Also, ich kann die Tabs for dem irgendwas löschen und then ein Leerzeichen am Ende hinzufügen, aber nicht den Zeilenumbruch löschen.
Wie mache ich sowas? Wie kann ich nun einen zeilenumbruch suchen und entfernen wie eventuell so:
	set "Line=!Line: then\n= then " 	--- ändere 'Leer then Neuezeile' in 'Leer then Leer'  

Den Rest löse ich bis lang so:
for /f "usebackq delims=" %%i in ("%input%") do (   
	set "Line=%%i" 					--- kompletter originaler Text  
	set "Line=!Line:    =%tab%!" 			--- mache 4 Leerzeichen zum Tab (%tab% ist weiter oben gespeichert :-))  
	set "Line=!Line:%tab%=!" 			--- lösche alle Tabs  
	set "Line=!Line:function.variable=ev!" 		--- ändere Strings und Variablen  
	set "Line=!Line:function.setup=es!" 		--- ändere Strings und Variablen  
	set "Line=!Line:function.config=ec!" 		--- ändere Strings und Variablen  
	set "Line=!Line:%str%=%rep%!" 			--- ändere Strings und Variablen  
	echo !Line! >> "%output%" 			--- kopiere neuen Text in neue Datei  
)

Das bekomme ich nicht hin. Ich hoffe mir kann jemand helfen und versteht was ich da machen will und hat eventuell auch noch ein paar andere Tips für mich bezüglich meines Vorhabens.

Hier nochmal zur Veranschaulichung. Aus dem:
function irgendwas(
    x=0
    if (x=5) then
        irgendwas.soll=passieren.hier()
    else
        wasandres.soll=passieren.hier()
    end
end
soll das werden:
function irgendwas(x=0; if (x=5) then irgendwas.soll=passieren.hier() else wasandres.soll=passieren.hier() end end

MfG Big Sanch

Content-Key: 341003

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

Printed on: April 18, 2024 at 20:04 o'clock

Member: maretz
maretz Jun 19, 2017 at 19:22:50 (UTC)
Goto Top
im zweifel geht das schon mit sed... alle return / tabs durch ein leerzeichen ersetzen -> fertig...
Member: Juanito
Juanito Jun 19, 2017 at 23:46:24 (UTC)
Goto Top
Hi,


ich möchte dir gerne PowerShell anstelle von Batch ans Herz legen.
Damit zu Skripten ist in vielerlei Hinsicht einfacher. - Leider ist die Lernkurve recht hoch, aber es lohnt sich wenn du häufig skriptest.

Die oben beschriebenen Probleme lassen sich bequem mit String-Manipulationen lösen. Schau mal hier:
https://www.windowspro.de/script/strings-powershell-ersetzen-vergleichen ...

Wenn du Lektüre zu PowerShell suchst kann ich dir die Bücher von Tobias Weltner empfehlen.


Grüße


Juanito
Member: AnkhMorpork
AnkhMorpork Jun 20, 2017 at 05:37:04 (UTC)
Goto Top
Aus meiner Erfahrung zum Thema Programmieren:

Dein Vorhaben ist kontraproduktiv weil die Lesbarkeit - und damit die "Wartung" - des Codes erschwert wird. Wenn du den Quelltext in 5 Jahren modifizieren willst, stehst du wie Ochs vorm Berg ...

jm2c
Member: emeriks
emeriks Jun 20, 2017 at 06:18:52 (UTC)
Goto Top
Hi,
Dein Vorhaben ist kontraproduktiv weil die Lesbarkeit - und damit die "Wartung" - des Codes erschwert wird. Wenn du den Quelltext in 5 Jahren modifizieren willst, stehst du wie Ochs vorm Berg ...
Dito!
Member: maretz
maretz Jun 20, 2017 at 07:07:00 (UTC)
Goto Top
Unsinn! Sorry, aber wie kommt man auf so nen Bolzen das es unleserlich ist? Wer sagt denn das der sich den Code vom Zielsystem holt um den zu lesen?

Wenn man eine Applikation baut liegt der Quelltext ja auch nicht auf dem "Zielsystem" sondern beim Entwickler.... Der hat das dann in einem Versionierungs-System (im besten Fall) und kann sich jederzeit jede Version genau ansehen.

Allerdings: Gerne wird sowas gemacht um einen "Fremdeingriff" zu unterbinden. Dafür ist das natürlich genauso unsinnig...
Member: emeriks
emeriks Jun 20, 2017 updated at 08:27:19 (UTC)
Goto Top
Ich kann nur für mich selbst sprechen und daraus meine Empfehlungen ableiten.
Je ausführlicher ein Code geschrieben ist, desto einfacher fällt der Review. Das ist Fakt.
Wenn man eine Batch "komprimieren" will, dann vermute ich dahinter auch den Quellcode-"Schutz". Und ich stimme Dir da voll zu, dass das dann Nonsens wäre.

@BigSanch
Falls es Dir darum geht, den Code zu verschleiern, dann solltest Du besser in Richtung "Kompilieren von Batch zu EXE" gehen.
Member: AnkhMorpork
AnkhMorpork Jun 20, 2017 at 10:18:15 (UTC)
Goto Top
Zitat von @maretz:

Unsinn! Sorry, aber wie kommt man auf so nen Bolzen das es unleserlich ist? Wer sagt denn das der sich den Code vom Zielsystem holt um den zu lesen?

Aus diesem Satz kann ich nur ablesen, dass du mit Programmieren nix am Hut hast.

Und es ist piepenhagen, woher er sich den Quellcode holt.

Und heiß is auch ...
Member: maretz
maretz Jun 20, 2017 at 11:26:05 (UTC)
Goto Top
Ok - und was bringt dich auf diese Vermutung? Ich programmiere relativ viel - und üblicherweise hole ich mir den Code nie vom Zielsystem zurück da ich gar nicht weiss ob der ggf. dort geändert wurde oder sonst was damit passiert ist.

Und in meinem Versionssystem ist der Code logischerweise korrekt formatiert. Der wird erst vor dem "ausliefern" (egal ob nun kommerziell oder privat) umgebaut. Entsprechend kann ich den da lesen, habe die Kommentare drin usw...

Aber gut, ich lasse dich in deinem Glauben das du die einzige Wahrheit kennst... HF & GL
Member: AnkhMorpork
AnkhMorpork Jun 20, 2017 at 12:03:31 (UTC)
Goto Top
Zitat von @maretz:

Aber gut, ich lasse dich in deinem Glauben das du die einzige Wahrheit kennst... HF & GL

Ich weiß gerade einmal wie man das schreibt ...
<Vorschlag>
Lass uns so auseinander gehen: Jedem wie er es mag.
</Vorschlag>

Ich mach dann hier Schluss - bringt dem TO ja nix.
Member: BigSanch
BigSanch Jun 20, 2017 at 13:48:17 (UTC)
Goto Top
Danke für den Anstoß werde mir das mal ansehen. Danke .-)
Member: BigSanch
BigSanch Jun 20, 2017 at 13:49:16 (UTC)
Goto Top
Werde mir sed mal zur Brust führen und dann schreiben ob ich es gerafft habe, Dankeface-smile
Member: BigSanch
BigSanch Jun 20, 2017 at 14:09:51 (UTC)
Goto Top
Erst mal Danke für Eure Antworten. Produktive Antworten habe ich kommentiert
@ all the rest :

Ich finde es kontraproduktiv jemandem zu sagen ob seine Arbeit einen Sinn hat oder nicht, wenn ich für mich entscheide eine Arbeit auf meinem Weg zu gestalten, dann erwarte ich dass das respektiert wird, genauso wie ich die Arbeit anderer respektiere. Was ich für einen Sinn dahinter sehe oder nicht, meinen Quellcode zu komprimieren, muss niemanden etwas angehen oder in Frage stellen. ICH sehe eine Sinn dahinter und wollte von der Seite hier einen Vorschlag wie man das umsetzt, nicht Klug###erei, ob es jemand produktiv oder Sinn entfremdet findet, sonst wäre meine Frage gewesen, "Was haltet Ihr von meiner Vorgehensweise".

Den Code den ich schreibe, ist mein Code, ich entwickle Addons selber, also habe ich natürlich den Original Code immer auf meiner Festplatte.
Da es Spiele und Systeme gibt, welche manche Codes nur in gewisser Dateigröße und ähnliches geben könnte, was man natürlich weiß, wenn man viel programmiert, macht es tatsächlich Sinn, manchmal gewissen Code zu komprimieren. Da es einfachheitshalber manchmal von Vorteil ist Variablen so zu benennen, dass man sie am besten zuordnen kann, man diese aber dann auf dem Server oder dem Spiel nicht mehr so benannt braucht, kann man die auch umbenennen um Zeichen zu sparen. Des weiteren ist es mit Sicherheit auch für geübte Coder in gewissen Situationen übersichtlicher, wenn man Funktionen dann irgendwann in einer Zeile hat, was auch schon einigen Codern aufgefallen sein dürfte. Da der Code in den meisten Verwendungen nicht abrufbar oder änderbar für Andere ist, da es in vielen Fällen Server seitig liegt, hat es absolut keinerlei Bewandtnis, ob ein Code nun offen, gekürzt, komprimiert oder auf irgendeine andere Weise verändert wurde, solange er funktioniert.

Wenn noch jemand etwas genauer wissen will, warum ich mit meinem Code was auch immer machen will, schreibt mich doch bitte per Mail an, denn andere die sich hier umsehen und eventuell je die gleiche Frage haben könnten, sollten doch bitte auch die Chance haben eine Lösung zu bekommen und nicht sich mit Banalitäten wie Unwissenheit und Unverständnis rumschlagen müssen.

Dennoch Danke für Eure investierte Zeit.