Jump to content

Batch If Else wird nicht ausgehführt


Recommended Posts

Hallo liebe Leute,

 

irgenwie will mich mein Rechner mich veräppeln, ich habe eine simple If Anweisung, die aber im Else Fall einfach rausspringt, und ich weiss nicht warum, vielleicht siehr ja jemand den Fehler. Das Script sieht so aus:

 

@Echo Off
CD /D %~dp0
SET "AF=C:\Users\Administrator\Downloads"

 FOR /f %%a in ('schtasks /query /TN _01_Regwerte_setzen /XML ^| findstr "UserId"') DO ( Set xml=%%a )
 set var2=%xml:~8,8%
 echo %var2%
 
IF %var2%==S-1-5-18 (
  
  ECHO - Aufgabe laeuft bereits unter Systemaccount -
	 Echo Es ist nichts zu machen
	 pause
	 EXIT
	 
 	 ) ELSE (
 
   ECHO.
	 ECHO - Aufgabe auf System umtragen
	 pause
	 FOR %%L in ( _01_Regwerte_setzen ) do SCHTASKS /Create /TN %%L /f /xml "%AF%\Aufgaben\%%L.xml">nul 2>&1
   pause
   )
 

 ECHO ALLES erledigt
 PAUSE
EXIT	

Das Ding ist, vor ein paar Monaten hat diese Logik bei mir noch funktioniert, ich denke wirklich langsam es sind die Updates, die Scripte plötlich nicht mehr funktionieren lassen

 

 

lg

 

Stefan

Edited by stefan4711
Link to post

Moin,

 

was auch immer 

vor 11 Minuten schrieb stefan4711:

die aber im Else Fall einfach rausspringt

heißt - ich verstehe die Fehlerbeschreibung nicht.

 

Ferner verstehe ich nicht, was du da eigentlich machst. Es wäre hilfreich, gäbest du an, was du denn eigentlich erreichen willst.

 

Was mir auffällt: EXIT beendet nicht das Skript, sondern die ganze CMD-Instanz. Das ist fast nie gewollt. Wenn du nur das Skript verlassen willst:

GOTO :eof

 

Gruß, Nils

 

Edited by NilsK
Link to post
Posted (edited)

heisst er macht in dem Fall, indem var2 eben nicht

S-1-5-18

das was er mchen soll nämlich die Aufgabe auf System umzustellen, also das folgende  (Stattdessen beendet er die Batch):

FOR %%L in ( _01_Regwerte_setzen ) do SCHTASKS /Create /TN %%L /f /xml "%AF%\Aufgaben\%%L.xml">nul 2>&1
Edited by stefan4711
Link to post

Moin,

 

also gibt "er" auch nicht das ECHO aus? Dann ist es das EXIT. Das führt eigentlich immer zu unerwünschten Folgen. Faustregel: EXIT gehört nicht in ein Batch.

 

Was du jetzt noch nicht beantwortet hast, ist, was du da eigentlich machst. Ich sehe irgendwas von Scheduled Task und Systemkonto, kann mir aber keinen Reim drauf machen. Typischerweise kann man Probleme vom Typ "Geht nicht" besser lösen, wenn man weiß, worum es insgesamt geht.

 

Gruß, Nils

 

  • Haha 1
Link to post

Hallo, danke für deine Antwort,

 

also dann erklär ichs mal kurz, die Anweisungen einzeln fuktionieren aber, es geht mir halt hier nur um die Ablauflogik, irgend  etwas scheint mit dem If/Else nicht zu stimmen. Es wird geprüft ob die Aufgabe unter Systemkontext läuft, wenn ja wird nichts gemacht, wenn nein wird die Aufgabe auf System umgeschrieben, von einer XML Datei. Er springt hier aber direkt raus und bringt nicht mal das ECHO - Aufgabe auf System umtragen mit der darauffolgenden Pause, die natürlich hier nur zum Debugging dient und später natürlich keinen Sinn mehr macht, ebenso das Exit.
    

Link to post

Moin,

 

Also du willst nicht erklären, was du machst. Gut, musst du auch nicht, ist ja ein freies Land hier.

 

Das Problem ist mit Sicherheit das Exit. Das beendet dein Skript und den ganzen CMD-Prozess. Möglicherweise habe ich die Vermutung schon mal geäußert. Du könntest jetzt mal versuchen, das Skript ohne Exit zu bauen. Musst du aber auch nicht, da sind wir liberal.

 

Übrigens ist die einzige Zeile in dem Skript, die was machen soll, völlig unnötig kompliziert. Die FOR-Schleife braucht es dort nicht.

 

Gruß, Nils

Link to post
Posted (edited)

Dos habe ich doch, ich ändere per Script den Ausführungskontext einer Aufgabe, wenn diese nicht auf System steht, denke da war meine Antwort wohl noch nicht abgeschickt, ok dann probier ichs mal ohne EXIT, aber wie wird das CMD dann beendet? Und ja die For Schleife braucht es hier nicht,, in der Klammer stehen sonst aber noch weitere Aufgaben, und dann macht es doch wieder Sinn, oder? Ich wollte es hier übersichtlich halten, war nicht böse gemeint und verwirren wollte ich auch nicht.

 

lg

 

Stefan

 

 

 

Edited by stefan4711
Link to post

Moin,

 

Puh, du bist aber ne echt harte Nuss. Wie dein Code jetzt aussieht, soll ich raten, oder wie?

 

Kann es sein, dass das Skript in dem umständlichen Befehl am Ende über den Versuch stolpert, die Variable AF aufzulösen, die du in der dritten Zeile fehlerhaft definiert hast?

 

Gruß, Nils

  • Haha 1
Link to post

sorry, hatte jetzt schon mehrfach versucht das Script zu posten, ich habe die eigentliche Befehlszeile ausgeremt, dass sich hier nicht jeder an der Zeile aufhängt, auch das zweite Exit ist raus, trotzdem muss das Script ja irgendwie beendet werden. Jetzt sezehen also nur Echos drin, und trotzdem funktioniert es nicht

 

Meine Frage lautet, was ist an der IF Anweisung faul, fehlt irgendwo ne Klammer?

@Echo Off
CD /D %~dp0
SET "AF=C:\Users\Administrator\Downloads"

 FOR /f %%a in ('schtasks /query /TN _01_Regwerte_setzen /XML ^| findstr "UserId"') DO ( Set xml=%%a )
 set var2=%xml:~8,8%
 echo %var2%
 
IF %var2%==S-1-5-18 (
  
  ECHO - Aufgabe laeuft bereits unter Systemaccount -
	 Echo Es ist nichts zu machen
	 pause
	exit
	 
 	 ) ELSE (
 
   pause
	 ECHO - Aufgabe auf System umtragen
	 ECHO Das sollte passieren wenn Aufgabe nicht unter System läuft, aber auch nur das
	 pause
	 REM FOR %%L in ( _01_Regwerte_setzen ) do SCHTASKS /Create /TN %%L /f /xml "%AF%\Aufgaben\%%L.xml">nul 2>&1
   pause
   )
 

 ECHO ALLES erledigt
 PAUSE
	

lg

 

Stefan

 

Link to post

Moin,

 

liest du auch, was man dir schreibt? Ein letztes Mal versuch ich es jetzt noch.

 

Diese Zeile ist fehlerhaft:

vor 12 Minuten schrieb stefan4711:

SET "AF=C:\Users\Administrator\Downloads"

Und:

 

vor 13 Minuten schrieb stefan4711:

auch das zweite Exit ist raus

Aber das erste Exit ist immer noch drin. Da Exit sich eben nicht so verhält, wie du das vermutest, kann es immer noch sein, dass es das Skript beendet, wenn der Parser die Zeile liest. Sollte er nicht, weil die Bedingung nicht zutrifft. Der CMD-Interpreter arbeitet aber nun mal anders als eine echte Programmiersprache. Solange das Exit also drinsteht - und zwar genau an der Stelle, wo der Abbruch stattfindet -, brauchen wir an dem Rest nicht rumzumachen.

 

Noch besser (und mittlerweile eine Frage der Höflichkeit) wäre es, wenn du uns endlich mal sagst, was du da eigentlich insgesamt vorhast. Warum machen wir ewig an dieser IF-Konstruktion in einem Batch rum? In der Zeit hätte man die Aufgabe vermutlich manuell längst erledigt. Oder man lässt das mit dem IF einfach und erzeugt den Task in jedem Fall neu, ist ja am Ende egal. Gibt es Gründe, das anders zu machen? Dann wäre es nett, wenn du uns das wenigstens mal skizzierst, denn dann können wir vielleicht sinnvoll zu einer Lösung beitragen, statt einfach nur rumzustochern.

 

Gruß, Nils

 

  • Like 3
Link to post

... nur zu diesem Thema .... 

 

vor 11 Minuten schrieb stefan4711:

trotzdem muss das Script ja irgendwie beendet werden

 

Hmmm ... was passiert denn auf Deinem System mit dem Script, wenn der letzte enthaltene Befehl abgearbeitet wurde?  ;-) 

 

... und die ganzen Pause-Befehle sind für ein Script auch wenig hilfreich, wenn es automatisch ablaufen soll, oder?  ;-);-) 

 

Ich weiß, hier werden gleich wieder Augen rollen, aber hast Du schon mal darüber nachgedacht, das Script in eine etwas modernere Technologie zu migrieren? ... PowerShell?

  • Like 1
Link to post

So also noch mal, ich hatte auch beide EXITS schon draussen, ich habe dich nicht ignoriert, es passiert immer noch das selbe, wenn Systemaccount, dann steht da nichts zu machen, wenn nicht dann haut er so schnell raus das man nicht mehr gucken kann und es passiert nichts, ob mit oder gar keinem EXIT. ich befolge schon dass was Ihr sagt;). Einfach mal eine Aufgabe nehmen die unter System läuft, und danach auf was anderes umtragen, dann seht Ihr was ich meine.

 

lg

 

 

Stefan

Link to post
vor 5 Minuten schrieb stefan4711:

Einfach mal eine Aufgabe nehmen die unter System läuft, und danach auf was anderes umtragen, dann seht Ihr was ich meine.

 

Du hast ja scheinbar in der XML-Datei die Du für das "Umtragen" benutzt, die korrekten Einstellungen hinterlegt, oder? Dann kannst Du die Prüfung, ob die Aufgabe mit dem Systemkonto läuft auch weglassen und einfach gleich die Aufgabe mit den gewünschten Einstellungen anlegen und damit eine eventuell fehlerhafte Aufgabe überschreiben.  ;-) 

Link to post
Posted (edited)

Ja klar steht in der XML System drin, ich habe diese Prüfung ja auch nur gemacht, um unnötige Verzögerungen zu vermeiden. Es muss doch aber ne Erklärung geben warum das If nicht läuft, Ich habe den Aufgabenimport ja momentan auskomentiert. Und wie bereits erwähnt, vor einigen Monaten funktionierte das ganze ja auch noch. (Updates ? anderes Batchverhalten, wär ja nichts Neues);)

Edited by stefan4711
Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...