¿Por qué no puedo LLAMAR "SI" y "PARA" ni por lotes ni en cmd?
Para ser honesto, no espero una respuesta satisfactoria aquí. No se puede llamar a este comando y eso es todo (por lo que sé, los únicos comandos que no se pueden usar con la llamada). Aquí hay algunos ejemplos con su salida:
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.
Tengo algunas sospechas de que IF y FOR no son, de hecho, comandos "reales"; simplemente deciden pasar el control de la línea de comandos a la línea (o bloque de corchetes) detrás de ellos o no, lo que confunde la llamada. De todos modos, incluso cuando se detectan errores de sintaxis en FOR for o IF, se detectan:
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.
Así que al menos se hace el análisis.