Почему я не могу вызывать «IF» и «FOR» ни в пакетном режиме, ни в cmd?
Честно говоря, я не ожидаю здесь удовлетворительного ответа. Эту команду нельзя вызвать и все (насколько я знаю, единственные команды, которые нельзя использовать с вызовом). Вот несколько примеров с их выводом:
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.
У меня есть некоторые подозрения, что IF и FOR на самом деле не являются «настоящими» командами - они просто решают передать управление командной строкой строке (или блоку скобок) за ними или нет, что приводит в замешательство вызов. В любом случае, даже при синтаксических ошибках в вызываемых FOR или IF они обнаруживаются:
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.
По крайней мере, разбор сделан.