[GELÖST] "For"-Schleife mit mehreren Aktionen

Antworten
Nils
Beiträge: 185
Registriert: 16 Sep 2011, 08:59

[GELÖST] "For"-Schleife mit mehreren Aktionen

Beitrag von Nils »

Hallo zusammen,

ich habe ein kleines Problem und hoffe auf eure Hilfe...
Folgendes möchte / muss ich erreichen:
Ich habe eine Stringliste ($tasks1$) mit einer variablen Anzahl an Elementen. Für jedes dieser Elemente muss ich nun eine Aktion durchführen, in welcher auf einen Teil des Names des jeweils aktuellen Eintrags zugegriffen wird.
Ein Eintrag der Liste hat z. B. folgenden Wert: ""\Microsoft\Windows\WS\WSTask","Nicht zutreffend","Bereit"".
Ich benötige jedoch lediglich "\Microsoft\Windows\WS\WSTask".

Zur Verdeutlichung:

Code: Alles auswählen

DefStringList $tasks$
DefStringList $tasks1$
DefVar $task$
DefVar $anzahl$
set $tasks$ = shellCall('%SYSTEM%\schtasks.exe /Query /FO CSV /NH')
set $tasks1$ = getListContaining($tasks$, "XYZ")
set $anzahl$ = count($tasks1$)
set $anzahl$ = calculate($anzahl$+"-1")
for %s% = "0" to $anzahl$ do set $task$ = unquote(takeString(1, $tasks1$), '"') + DosInAnIcon_edit

[DosInAnIcon_edit]
echo $task$
Tue etwas mit $task$
Da ich die Sub für jedes Element aufrufen muss und in jedem Aufruf einen Teil des Namens des jeweils aktuellen Eintrags der Liste benötige, brauche ich meiner Ansicht nach in der "For"-Schleife zwei Befehle.
Meines Wissens nach kann ich jedoch immer nur einen Befehl (z. B. "set $task$ = ...") je Schleife ausführen. Oder irre ich mich da?

Wie kann ich das Problem lösen?

Vielen Dank im Voraus für eure Unterstützung und eure Ideen. :)
Viele Grüße und einen schönen, erfolgreichen Tag.
Nils
Zuletzt geändert von Nils am 15 Dez 2015, 13:41, insgesamt 1-mal geändert.
holgerv
Beiträge: 288
Registriert: 20 Aug 2012, 09:35

Re: "For"-Schleife mit mehreren Aktionen

Beitrag von holgerv »

Du kannst ein Unterprogramm (sub) in einer for-Schleife ausführen.
Nils
Beiträge: 185
Registriert: 16 Sep 2011, 08:59

Re: "For"-Schleife mit mehreren Aktionen

Beitrag von Nils »

Hallo Holger,

vielen Dank für deine Antwort.
An die Variante mit der Sub dachte ich auch schon ("...DosInAnIcon_edit").
Die Schwierigkeit für mich besteht jedoch darin, dass ich in der Sub auf einzelne Teile der Strings aus der Stringliste zugreifen muss.
Ein Eintrag der Liste hat z. B. folgenden Wert: ""\Microsoft\Windows\WS\WSTask","Nicht zutreffend","Bereit"".
Ich benötige jedoch lediglich "\Microsoft\Windows\WS\WSTask".
Das wollte ich mit der Zeile
for %s% = "0" to $anzahl$ do set $task$ = unquote(takeString(1, $tasks1$), '"') + DosInAnIcon_edit
zum Ausdruck gebracht haben.
Wie bekomme ich es hin, dass ich in der Sub auf den gewünschten Teil der Strings aus der Liste zugreifen kann?
Theoretisch brauche ich eine Sub, die mir den aktuellen String zerlegt und die dann mit diesem String eine DosInAnIcon-Sub durchführt.
Meines Wissens nach kann ich in einer DosInAnIcon-Sub leider nicht so etwas ausführen wie:

Code: Alles auswählen

set $task$ = unquote(takeString(1, $tasks1$), '"')
Dann könnte ich anschließend auf den von mir benötigten Teilstring $task$ zugreifen.
Inzwischen bin ich soweit, dass ich mit:

Code: Alles auswählen

for %s% in $tasks1$ do DosInAnIcon_edit
zwar in der DosInAnIcon-Sub auf den jeweils aktuellen String zugreifen kann, da dieser jedoch mehr enthält, als ich benötige, muss ich diese noch irgendwie zurecht gestutzt bekommen. Nur wie?

Hinter der ganzen Aktion steckt, dass ich die Liste aller geplanten Aufgaben auf einem PC abfragen muss, um anschließend bestimmte dieser Aufgaben zu ändern. Wobei das Ändern dank des Dos-Befehls "schtasks.exe" kein Problem darstellt. Sofern ich den Namen der Aufgabe als String habe...
Falls noch etwas unklar sein sollte, bitte fragen!

Vielen Dank für eure Hilfe und einen schönen, hoffentlich letzten Arbeitstag für diese Woche.
Viele Grüße
Nils
holgerv
Beiträge: 288
Registriert: 20 Aug 2012, 09:35

Re: "For"-Schleife mit mehreren Aktionen

Beitrag von holgerv »

Vielleicht hilft Dir das Folgende:

Code: Alles auswählen

[Actions]
DefStringList $stringliste$
DefVar $einzelstring$
Set $stringliste$=CreateStringList('eins','zwei', 'drei')
for %einzelstring% in $stringliste$ do Sub_do_something

[Sub_do_something]
Set $einzelstring$="%einzelstring%"
DosBatch_echo_einzelstring

[DosBatch_echo_einzelstring]
echo $einzelstring$
pause
Vgl. auch: https://download.uib.de/opsi4.0/doc/htm ... -iteration

Viel Erfolg!


Holger
Nils
Beiträge: 185
Registriert: 16 Sep 2011, 08:59

Re: "For"-Schleife mit mehreren Aktionen

Beitrag von Nils »

Hallo Holger,

bitte entschuldige, dass ich erst heute antworte.
Inzwischen habe ich (für mich) eine Lösung gefunden. Ich rufe nun aus der "For"-Schleife eine Sub auf, welche den String wie gewünscht zerlegt. Anschließend ruft diese Sub eine weitere Sub auf, welche dann die eigentliche Aktion durchführt.
Bisher scheint das so zu funktionieren.

[UPDATE / LÖSUNG]
Hier der Code, wie ich es nun für mich realisiert habe.

Code: Alles auswählen

...
DefStringList $tasks$
DefVar $task$
DefVar $anzahl$
set $tasks$ = getListContaining(shellCall('%SYSTEM%\schtasks.exe /Query /FO CSV'), "Media Center")
set $anzahl$ = calculate(count($tasks$)+"-1")
for %s% = "0" to $anzahl$ do sub_split_string
		
[sub_split_string]
set $task$ = unquote(takeString(%s%, $tasks$), '"')
DosInAnIcon_disableTasks

[DosInAnIcon_disableTasks]
%SYSTEM%\schtasks.exe /Change /TN "$task$" /$status$
Viele Grüße und nochmals vielen herzlichen Dank für deine Hilfe! :)
Nils
Antworten