Suche Strategien zur Vorgehensweise (bei der Entwicklung) - b) Unterschiede bei Doppelklick, Aufruf in der Konsole von Win2k bis zur aktuellen Version - c) setlocal, sich gegenseitig aufrufende CMDs
Hallo zusammen,
meine Suche war bislang erfolglos und meine Selbstversuche machen mich langsam irre!
Daher wird das mein erstes Posting.
Um meine Skripte, die während der Entwicklung immer länger werden, übersichtlicher zu gestalten, wollte ich Teile auslagern und dann über CALL aufrufen.
Länger werden die Skripte auch, weil während der Entwicklungszeit zusätzliche ECHOs eingebaut werden, um den aktuellen Status und Variablenwerte im Skript mit Meldungen anzuzeigen. Die könnten theoretisch später auch wieder raus. Sinnhafte Meldungen und Kommentierungen im Code, die auch nach Monaten oder Jahren am Monitor oder im Editor auf den Sinn des Skriptes oder Lösungsansätze hinweisen, verlängern noch einmal den Code.
Spätestens an einer dieser Stellen schlägt Murphy zu, der Spaß vergeht und die Produktivität sinkt gegen Null!
b1) Wie stelle ich sicher, dass die Skripte beim Aufruf über die Konsole identisch reagieren, wie beim Doppelklick? Ich habe die Vermutung, dass es dort Unterschiede gibt und wenn ich ein an der Konsole "funktionsfähiges" Skript über Doppelklick aufrufe .... Dazu kommen die Fehler, die mit der verzögerten Auswertung von Variablen resultieren. Also: %test% und !test! ... brrrr .
WELCHE?
weitere Fehlerquellen:
- komfortable Auswertung von übergebenen Parametern (ohne eine Reihenfolge festzulegen) oder auch flexiblel mit sowas "-" "--" oder "/" umzugehen.
z.B. eine eigene Hilfe einbauen "-help" "--help" "/?" oder auch "Hilfe".
- Skripte, die mit Doppelklick eine Aufgabe lösen aber auf der Konsole Zusatzaufgaben lösen können.
- Skripte, die sich auf mehrere Teilskripte verteilen, die aber dennoch nicht über die Konsole aufrufbar sind oder sich über den Namen als "nicht auszuführen" ausweisen, weil sie einzeln keinen Sinn bringen. Diese Variante müllt aber das Verzeichnis voll. (Man könnte zu benutzende Skripte als CMD und nicht zu benutzende Skripte als BAT speichern. Das wäre aber eine Lösung, die man nicht in eine Umgebung geben könnte, die "ich" nicht kontrollieren kann.
Wie sehen die Unterschiede in den verschiedenen Windows-Versionen seit 2k aus, wenn ein Skript auf mehreren Versionen laufen soll? (Auch wenn 2k nicht mehr aktuell ist)
Gibt es in den Versionen Fehler, die sich nicht mit Logik erschließen lassen, eine Versionsabfrage benötigen oder gar einen richtigen Workaround, weil es ein (bekannter) Fehler ist?
c) Wie sieht es mit der Kombination SETLOCAL und SETLOCAL enabledelayedexpansion (auch bei sich aufrufenden Skripten) aus?
Das sind definitv zwei Funktionen, die auch gemeinsam auftreten können, sodass es dann so aussehen kann?
SETLOCAL
SETLOCAL enabledelayedexpansion
ja - es handelt sich teilweise um konkrete Probleme mehr aber um Best-Practice. Daher wollte ich die Fragen trotzdem in einer Frage lassen.
ja - ich hätte gerne die eierlegende Wollmilchsau -- nur fliegen muss sie nicht zwingend
vielen Dank für JEDEN hilfreichen Hinweis zur eigenen Vorgehensweise. Tutorials haben mir bisher nichts gebracht.
Luftpolsterfolie
meine Suche war bislang erfolglos und meine Selbstversuche machen mich langsam irre!
Daher wird das mein erstes Posting.
Um meine Skripte, die während der Entwicklung immer länger werden, übersichtlicher zu gestalten, wollte ich Teile auslagern und dann über CALL aufrufen.
Länger werden die Skripte auch, weil während der Entwicklungszeit zusätzliche ECHOs eingebaut werden, um den aktuellen Status und Variablenwerte im Skript mit Meldungen anzuzeigen. Die könnten theoretisch später auch wieder raus. Sinnhafte Meldungen und Kommentierungen im Code, die auch nach Monaten oder Jahren am Monitor oder im Editor auf den Sinn des Skriptes oder Lösungsansätze hinweisen, verlängern noch einmal den Code.
Spätestens an einer dieser Stellen schlägt Murphy zu, der Spaß vergeht und die Produktivität sinkt gegen Null!
b1) Wie stelle ich sicher, dass die Skripte beim Aufruf über die Konsole identisch reagieren, wie beim Doppelklick? Ich habe die Vermutung, dass es dort Unterschiede gibt und wenn ich ein an der Konsole "funktionsfähiges" Skript über Doppelklick aufrufe .... Dazu kommen die Fehler, die mit der verzögerten Auswertung von Variablen resultieren. Also: %test% und !test! ... brrrr .
WELCHE?
weitere Fehlerquellen:
- komfortable Auswertung von übergebenen Parametern (ohne eine Reihenfolge festzulegen) oder auch flexiblel mit sowas "-" "--" oder "/" umzugehen.
z.B. eine eigene Hilfe einbauen "-help" "--help" "/?" oder auch "Hilfe".
- Skripte, die mit Doppelklick eine Aufgabe lösen aber auf der Konsole Zusatzaufgaben lösen können.
- Skripte, die sich auf mehrere Teilskripte verteilen, die aber dennoch nicht über die Konsole aufrufbar sind oder sich über den Namen als "nicht auszuführen" ausweisen, weil sie einzeln keinen Sinn bringen. Diese Variante müllt aber das Verzeichnis voll. (Man könnte zu benutzende Skripte als CMD und nicht zu benutzende Skripte als BAT speichern. Das wäre aber eine Lösung, die man nicht in eine Umgebung geben könnte, die "ich" nicht kontrollieren kann.
Wie sehen die Unterschiede in den verschiedenen Windows-Versionen seit 2k aus, wenn ein Skript auf mehreren Versionen laufen soll? (Auch wenn 2k nicht mehr aktuell ist)
Gibt es in den Versionen Fehler, die sich nicht mit Logik erschließen lassen, eine Versionsabfrage benötigen oder gar einen richtigen Workaround, weil es ein (bekannter) Fehler ist?
c) Wie sieht es mit der Kombination SETLOCAL und SETLOCAL enabledelayedexpansion (auch bei sich aufrufenden Skripten) aus?
Das sind definitv zwei Funktionen, die auch gemeinsam auftreten können, sodass es dann so aussehen kann?
SETLOCAL
SETLOCAL enabledelayedexpansion
ja - es handelt sich teilweise um konkrete Probleme mehr aber um Best-Practice. Daher wollte ich die Fragen trotzdem in einer Frage lassen.
ja - ich hätte gerne die eierlegende Wollmilchsau -- nur fliegen muss sie nicht zwingend
vielen Dank für JEDEN hilfreichen Hinweis zur eigenen Vorgehensweise. Tutorials haben mir bisher nichts gebracht.
Luftpolsterfolie
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 253170
Url: https://administrator.de/contentid/253170
Ausgedruckt am: 25.11.2024 um 12:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo Luftpolsterfolie, willkommen im Forum.
Zu a) habe ich eigentlich gar keine richtige Frage gefunden. Vielleicht so viel: Mit Batch schreibt man kleine Helferlein, die stupide, sich ständig wiederholende Abläufe automatisiert. Batchcode mit tausenden Zeilen am Stück halte ich persönlich für Batch schon für ein Designproblem. Natürlich ist es in jeder Sprache Best Practice den Code so zu kommentieren, dass man auch nach Jahren wieder den Einstieg findet. Klar kann man Code in mehrere Dateien aufsplitten. Ebenso kann man auch prozedural arbeiten und Labels per CALL aufrufen.
Zu b)
Zu c)
SETLOCAL erzeugt eine neue Subumgebung, ENDLOCAL beendet diese. Es gibt mehr als nur das Schlüsselwort "EnableDelayedExpansion" wie du der Hilfe zu SETLOCAL entnehmen kannst. Interessant ist sicher in dem Fall das "DisableDelayedExpansion".
Faustregel: Zuweisungen von Variablen sind sicher bei ausgeschalteter verzögerter Erweiterung, das Arbeiten mit der Variablen hingegen mit eingeschalteter verzögerter Erweiterung.
Grüße
rubberman
Zu a) habe ich eigentlich gar keine richtige Frage gefunden. Vielleicht so viel: Mit Batch schreibt man kleine Helferlein, die stupide, sich ständig wiederholende Abläufe automatisiert. Batchcode mit tausenden Zeilen am Stück halte ich persönlich für Batch schon für ein Designproblem. Natürlich ist es in jeder Sprache Best Practice den Code so zu kommentieren, dass man auch nach Jahren wieder den Einstieg findet. Klar kann man Code in mehrere Dateien aufsplitten. Ebenso kann man auch prozedural arbeiten und Labels per CALL aufrufen.
Zu b)
Wie stelle ich sicher, dass die Skripte beim Aufruf über die Konsole identisch reagieren, wie beim Doppelklick? Ich habe die Vermutung, dass es dort Unterschiede gibt und wenn ich ein an der Konsole "funktionsfähiges" Skript über Doppelklick aufrufe
Hast du mal ein Beispiel parat?Dazu kommen die Fehler, die mit der verzögerten Auswertung von Variablen resultieren. Also: %test% und !test! ... brrrr .
Warum? Zu SETLOCAL gibt es auch ENDLOCAL. Code so zu schreiben, dass das kein Problem macht, ist deine Verantwortung.- komfortable Auswertung von übergebenen Parametern (ohne eine Reihenfolge festzulegen) oder auch flexiblel mit sowas "-" "--" oder "/" umzugehen.
Werte die übergebenen Parameter aus. Mit %1 - %9 kommst du da ran (ggf. mit SHIFT arbeiten oder über %* in einer FOR Schleife iterieren wenn es viele Argumente sind).- Skripte, die mit Doppelklick eine Aufgabe lösen aber auf der Konsole Zusatzaufgaben lösen können.
- Skripte, die sich auf mehrere Teilskripte verteilen, die aber dennoch nicht über die Konsole aufrufbar sind oder sich über den Namen als "nicht auszuführen" ausweisen, weil sie einzeln keinen Sinn bringen. Diese Variante müllt aber das Verzeichnis voll. (Man könnte zu benutzende Skripte als CMD und nicht zu benutzende Skripte als BAT speichern. Das wäre aber eine Lösung, die man nicht in eine Umgebung geben könnte, die "ich" nicht kontrollieren kann.
Schau dir mal die Unterschiede der %CMDCMDLINE% Variablen an, wenn du per Doppelklick, bzw. aus der Kommandozeile startest. Zumindest kannst du diese Fälle unterscheiden.- Skripte, die sich auf mehrere Teilskripte verteilen, die aber dennoch nicht über die Konsole aufrufbar sind oder sich über den Namen als "nicht auszuführen" ausweisen, weil sie einzeln keinen Sinn bringen. Diese Variante müllt aber das Verzeichnis voll. (Man könnte zu benutzende Skripte als CMD und nicht zu benutzende Skripte als BAT speichern. Das wäre aber eine Lösung, die man nicht in eine Umgebung geben könnte, die "ich" nicht kontrollieren kann.
Wie sehen die Unterschiede in den verschiedenen Windows-Versionen seit 2k aus, wenn ein Skript auf mehreren Versionen laufen soll? (Auch wenn 2k nicht mehr aktuell ist)
w2k ist so lang her, dass ich mich nicht erinnern kann. Wenn du unbedingt abwärtskompatiblen Code schreiben musst, dann verwende keine Befehle, deren Syntax sich zwischenzeitlich geändert hat oder die tw. nicht an Bord waren (z.B. CHOICE) und verwende keine Befehle, die irgendwann neu aufgenommen wurden (TIMEOUT, ROBOCOPY etc.). Ein bisschen abwärtskompatibel ist nie schlecht. Sich aber heute noch auf w2k berufen zu wollen ist Nonsens. Selbst XP solltest du langsam aber sicher aus den Gedanken verbannen ...Gibt es in den Versionen Fehler, die sich nicht mit Logik erschließen lassen, eine Versionsabfrage benötigen oder gar einen richtigen Workaround, weil es ein (bekannter) Fehler ist?
Mehr als Haare am S * * *. Die alle aufzuführen wäre ebenso müßig wie für alles ein Workaround schreiben zu wollen. Meiner Meinung nach haben die Entwickler der CMD und der zugehörigen Tools alle unter dem Einfluss merkwürdiger Substanzen gestanden, als sie den Code dafür geschrieben haben ...Zu c)
SETLOCAL erzeugt eine neue Subumgebung, ENDLOCAL beendet diese. Es gibt mehr als nur das Schlüsselwort "EnableDelayedExpansion" wie du der Hilfe zu SETLOCAL entnehmen kannst. Interessant ist sicher in dem Fall das "DisableDelayedExpansion".
Faustregel: Zuweisungen von Variablen sind sicher bei ausgeschalteter verzögerter Erweiterung, das Arbeiten mit der Variablen hingegen mit eingeschalteter verzögerter Erweiterung.
Grüße
rubberman
Hallo Luftpolsterfolie,
es gibt da ein paar "goldene Regeln", die Du Dir mal durch den Kopf gehen lassen solltest:
Von mir aus halte mich für einen Phrasendrescher oder für bekloppt - oder denk mal drüber nach.
Gruß
Friemler
es gibt da ein paar "goldene Regeln", die Du Dir mal durch den Kopf gehen lassen solltest:
- Lade Deinen Frust über eine Sache, mit der Du Schwierigkeiten hast, nicht bei den Leuten ab, die Du um Hilfe bittest.
- Ein komplexes Problem zu strukturieren und in kleinere Teilprobleme zu zerlegen, aus denen sich dann konkrete und überschaubare Fragen formulieren lassen, ist die Voraussetzung um eine Gesamtlösung entwickeln zu können. Außerdem findest Du dann auch leichter einen oder mehrere Menschen, die Dir weiterhelfen können/wollen.
- Es ist noch kein Meister vom Himmel gefallen.
- Wer zu viel auf einmal will, bekommt am Ende garnichts.
- Mühsam ernährt sich das Eichhörnchen.
- Mit einem Messer im Rücken geht man nicht nach Hause.
Von mir aus halte mich für einen Phrasendrescher oder für bekloppt - oder denk mal drüber nach.
Gruß
Friemler