Dlaczego nie mogę zadzwonić „IF” i „FOR” ani w partii, ani w cmd?
Szczerze mówiąc, nie oczekuję tutaj satysfakcjonującej odpowiedzi. Nie można wywołać tego polecenia i to wszystko (o ile znam jedyne polecenia, których nie można używać z wywołaniem). Oto kilka przykładów z ich wynikami:
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.
Mam pewne podejrzenia, że IF i FOR nie są w rzeczywistości „prawdziwymi” poleceniami - po prostu decydują się przekazać kontrolę wiersza poleceń do linii (lub bloku nawiasów) za nimi, czy nie, co myli połączenie. W każdym razie nawet wtedy, gdy występują błędy składniowe w nazwie FOR lub JEŻELI są wykrywane:
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.
Więc przynajmniej parsowanie jest wykonywane.