Warum kann ich weder im Batch noch im Cmd "IF" und "FOR" aufrufen?
Um ehrlich zu sein, erwarte ich hier keine zufriedenstellende Antwort. Dieser Befehl kann nicht aufgerufen werden und das ist er (soweit ich weiß, die einzigen Befehle, die mit call nicht verwendet werden können). Hier sind einige Beispiele mit ihrer Ausgabe:
C:\Windows\system32>call @if a==a echo called
',' is not recognized as an internal or external command,
operable program or batch file.
C:\Windows\system32>call (@if a==a echo called)
';' is not recognized as an internal or external command,
operable program or batch file.
C:\Windows\system32>call if a==a echo called
'if' is not recognized as an internal or external command,
operable program or batch file.
C:\Windows\system32>call for %a in (1) do @echo called
'for' is not recognized as an internal or external command,
operable program or batch file.
C:\Windows\system32>call @for %a in (1) do @echo called
'+' is not recognized as an internal or external command,
operable program or batch file.
C:\Windows\system32>call (@for %a in (1) do @echo called)
';' is not recognized as an internal or external command,
operable program or batch file.
Ich habe den Verdacht, dass IF und FOR keine "echten" Befehle sind - sie entscheiden sich lediglich dafür, die Steuerung der Eingabeaufforderung an die dahinter stehende Zeile (oder den Klammerblock) weiterzuleiten, was den Aufruf verwirrt. Auf jeden Fall werden Syntaxfehler in FOR oder IF erkannt, wenn sie auftreten:
C:\Windows\system32>call (@if a= echo called)
= was unexpected at this time.
C:\Windows\system32>call (for %a (1) do echo called)
(1 was unexpected at this time.
Zumindest das Parsen ist also erledigt.