caddym
Goto Top

CMD- For-Schleife geht mal und mal nicht?!?

Hallo zusammen,

Ich hab seit einiger Zeit (nach irgendeinem Windowsupdate, keine Ahnung welches das gewesen sein könnte) ein Problem mit einem Befehl, der in einer Batchdatei auf Windows-PCs ausgeführt wird:

for /F "tokens=2 delims=," %f in ('tasklist /fo csv ^|findstr /i "planung_."') do taskkill /F /PID %f /T  

Bis zu einem gewissen Zeitraum hat der Befehl so funktioniert, jetzt KANN es sein dass es funktioniert wenn ich das %f in %%f ändere, es kann aber auch sein dass die Kommandozeile direkt danach abstürzt / sich schließt, obwohl noch weitere Befehle folgen. Das ist aber auch nicht überall so - auf meinem Laptop mit Windows 7 funktioniert der hier:

for /F "tokens=2 delims=," %%f in ('tasklist /fo csv ^|findstr /i "planung_."') do taskkill /F /PID %%f /T  
auf Windows 8 / 10 je nach Updatestand ja oder auch nein ...

Kann mir das jemand erklären? Hat das ggf. mit der Powershell zu tun, dass *.bat-Dateien jetzt standardmäßig darüber gestartet werden und nicht mehr über cmd.exe? Dann würde ich das ggf. noch verstehen, weil die Syntax für FOR-Schleifen dort eine andere ist ...

Gruß
(ein total ratloser) Caddy ....

Content-Key: 349203

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

Printed on: April 24, 2024 at 17:04 o'clock

Member: Pjordorf
Pjordorf Sep 15, 2017 at 10:54:49 (UTC)
Goto Top
Hallo,

Zitat von @CaddyM:
Bis zu einem gewissen Zeitraum hat der Befehl so funktioniert
Nö, eigentlich noch nie in deiner Batch Datei.

wenn ich das %f in %%f ändere
%%F ist in einer Batch Datei zwingend nötig

es kann aber auch sein dass die Kommandozeile direkt danach abstürzt
Wir kennen die Zeilen danach nicht

auf meinem Laptop mit Windows 7 funktioniert der hier:
Andere Rechte?

auf Windows 8 / 10 je nach Updatestand ja oder auch nein ...
Dann hast du das Update ja schon Identifiziert. Welches ist es denn?

Kann mir das jemand erklären?
In Batch müssen halt 2 %% aufeinander folgen, in einer Manuellen kommandizeile reicht ein %

Hat das ggf. mit der Powershell zu tun


weil die Syntax für FOR-Schleifen dort eine andere ist ...
Wo ist die Syntax dort anders?

Gruß,
Peter
Member: Penny.Cilin
Solution Penny.Cilin Sep 15, 2017 at 11:04:02 (UTC)
Goto Top
Zitat von @CaddyM:

Hallo zusammen,

Ich hab seit einiger Zeit (nach irgendeinem Windowsupdate, keine Ahnung welches das gewesen sein könnte) ein Problem mit einem Befehl, der in einer Batchdatei auf Windows-PCs ausgeführt wird:

for /F "tokens=2 delims=," %f in ('tasklist /fo csv ^|findstr /i "planung_."') do taskkill /F /PID %f /T  
Das hat in einer Batchdatei so noch NIE funktioniert, auch nicht zu DOS Zeiten.
Dieser Befehl funktioniert in einer Eingabeaufforderung.

Bis zu einem gewissen Zeitraum hat der Befehl so funktioniert,
Wie gesagt in einer Eingabeaufforderung funktioniert es. In einer Batchdatei nicht.

jetzt KANN es sein dass es funktioniert wenn ich das %f in %%f ändere, es kann aber auch sein dass die Kommandozeile direkt danach abstürzt / sich schließt, obwohl noch weitere Befehle folgen. Das ist aber auch nicht überall so - auf meinem Laptop mit Windows 7 funktioniert der hier:

for /F "tokens=2 delims=," %%f in ('tasklist /fo csv ^|findstr /i "planung_."') do taskkill /F /PID %%f /T  
auf Windows 8 / 10 je nach Updatestand ja oder auch nein ...
Grundsätzlich müssen in einer Batchdatei zwei %% gesetzt werden, bei einer Eingabeaufforderung sind es ein % Zeichen.
Das war schon immer so.

Kann mir das jemand erklären? Hat das ggf. mit der Powershell zu tun, dass *.bat-Dateien jetzt standardmäßig darüber gestartet werden und nicht mehr über cmd.exe? Dann würde ich das ggf. noch verstehen, weil die Syntax für FOR-Schleifen dort eine andere ist ...
Du verwechselst Batch mit Powershell

Schau über die Suche nach Batch Tutorial, For Schleife.


Gruß
(ein total ratloser) Caddy ....

Gruss Penny
Member: CaddyM
CaddyM Sep 15, 2017 at 11:38:54 (UTC)
Goto Top
Zitat von @Penny.Cilin:

Zitat von @CaddyM:

Hallo zusammen,

Ich hab seit einiger Zeit (nach irgendeinem Windowsupdate, keine Ahnung welches das gewesen sein könnte) ein Problem mit einem Befehl, der in einer Batchdatei auf Windows-PCs ausgeführt wird:

for /F "tokens=2 delims=," %f in ('tasklist /fo csv ^|findstr /i "planung_."') do taskkill /F /PID %f /T  
Das hat in einer Batchdatei so noch NIE funktioniert, auch nicht zu DOS Zeiten.
Dieser Befehl funktioniert in einer Eingabeaufforderung.

Hm - ich bin zielmlich sicher dass das bei einigen PCs so funktioniert hat, nachdem ich die Batch auf diese Schreibweise geändert habe.

Bis zu einem gewissen Zeitraum hat der Befehl so funktioniert,
Wie gesagt in einer Eingabeaufforderung funktioniert es. In einer Batchdatei nicht.

Merkwürdig, aber ok. Wenn ich eine Bat-Datei hier starte wird "c:\windows\system32\cmd.exe" im Fenstertitel angezeigt, von daher echt seltsam, dieses Verhalten, dass der Befehl nicht funktioniert, wenn die Datei cmd.exe startet, aber funktioniert wenn es in cmd.exe direkt eingetragen wird. Ich nehm das mal so hin.

Kann mir das jemand erklären? Hat das ggf. mit der Powershell zu tun, dass *.bat-Dateien jetzt standardmäßig darüber gestartet werden und nicht mehr über cmd.exe? Dann würde ich das ggf. noch verstehen, weil die Syntax für FOR-Schleifen dort eine andere ist ...
Du verwechselst Batch mit Powershell

Ok, ich stelle die Frage mal anders (ich verwechsel das tatsächlich nicht):

Wenn ich eine Bat-Datei starte, worüber wird die genau ausgeführt - IMMER über cmd.exe oder kann es sein, dass sich die Powershell dort als Standard einnisten kann? Ich meine ich kann doch z.B. einer txt-Datei auch ein anderes Standardprogramm angeben ...
Member: Penny.Cilin
Penny.Cilin Sep 15, 2017 at 12:15:23 (UTC)
Goto Top
Das stimmt nicht. Rufe die Eingabeaufforderung (cmd.exe) auf und kopiere den ersten Befehl und führe in aus.
Du wirst sehen, das es funktioniert.

Wenn Du Deinen zweiten Befehl in die Eingabeaufforderung (cmd.exe) kopierst und ausführst, wirst Du eine Fehlermeldung bekommen.

Also wenn ich eine Batchdatei anklicke, wird bei mir der Titel der Batchdatei angezeigt.
Member: Pjordorf
Pjordorf Sep 15, 2017 updated at 13:43:52 (UTC)
Goto Top
Hallo,

Zitat von @CaddyM:
Hm - ich bin zielmlich sicher dass das bei einigen PCs so funktioniert hat, nachdem ich die Batch auf diese Schreibweise geändert habe.
Da irrst du

Merkwürdig, aber ok.
Du musst uns natürlich kein glauben schenken. Ein For /? in ein Kommandozeilenfenster sagt es dir. Auch z.B. hier kannst du es nachlesen. http://www.robvanderwoude.com/for.php in 1. Notes.

Wenn ich eine Bat-Datei hier starte wird "c:\windows\system32\cmd.exe" im Fenstertitel angezeigt
Joa, ist auch OK. Und wenn du es als Admin startest steht wieder etwas anderes da. Normalerweise steht im Fenstertitel "Eingabeausfforderung" oder ein "Administrator: Eingabeaufforderung" im Fenstertitel.

wenn die Datei cmd.exe startet
Nein, wenn die CMD die Batch abarbeitet. face-smile

aber funktioniert wenn es in cmd.exe direkt eingetragen wird. Ich nehm das mal so hin.
Du musst uns nicht glauben, gibt millionenfache Hinweise im Internet. Vertraue deinem PC face-smile Die erste Seite mit For /? sagt es dir.

Wenn ich eine Bat-Datei starte
Definiere deine Batch Datei. Meine haben .bat oder .cmd und diese Endung sagt dem OS starte bitte das Command Programm und in einem Fenster (Kommandozeilenfenster, DOS Fenster usw.). Wenn ich meine Dateiendung sage, starte bitte ein Powershell wird das noch passieren, aber ob die diese Batch abarbeiten kann ist dan ungewiss. Powershell ungleich Batch ungleich CB Script usw. Was also ist bei dir eingestellt beim Starten einer Batch Datei? https://en.wikipedia.org/wiki/Batch_file

Gruß,
Peter