Seite 1 von 1

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

Verfasst: 26 Nov 2015, 13:30
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

Re: "For"-Schleife mit mehreren Aktionen

Verfasst: 26 Nov 2015, 15:25
von holgerv
Du kannst ein Unterprogramm (sub) in einer for-Schleife ausführen.

Re: "For"-Schleife mit mehreren Aktionen

Verfasst: 27 Nov 2015, 07:00
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

Re: "For"-Schleife mit mehreren Aktionen

Verfasst: 27 Nov 2015, 11:17
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

Re: "For"-Schleife mit mehreren Aktionen

Verfasst: 02 Dez 2015, 14:51
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