Un programa de consola no tiene menús que puedas recorrer para ver qué sabe hacer. Lo que tiene es su ayuda: un texto que te enseña si se la pides. En esta entrega vemos cómo se pide, cómo se lee y qué debería llevar la de un programa que escribas tú.

Lo de leerla ya lo sabes hacer, aunque no lo parezca. La ayuda de VFP explica cada comando con corchetes y barras, y las ayudas de la consola usan la misma notación.

Cómo se pide

No hay una sola forma, depende de la familia del programa:

  • /?, en los programas clásicos de Windows: ping /?, dir /?, tasklist /?.
  • -h o --help, en casi todo lo demás: git log -h.
  • Sin argumentos. Muchos programas, si no les das lo que necesitan, enseñan cómo se usan. ping sin nada saca su línea de uso.

Si no sabes cuál usar, prueba en ese orden: --help, -h y /?.

Y casi todos tienen también --version, que dice qué versión tienes instalada. Es lo primero que te piden cuando algo falla:

git --version
git version 2.54.0.windows.1

Cómo se lee

Esta es la línea de uso de ping /?:

Uso: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
          [-r count] [-s count] [[-j host-list] | [-k host-list]]
          [-w timeout] [-R] [-S srcaddr] [-c compartment] [-p]
          [-4] [-6] nombre_destino

Parece mucho, pero con cuatro signos se lee entera. Son los mismos que usa la ayuda de VFP, por ejemplo en USE (simplificado):

USE [TableName] [IN nWorkArea | cTableAlias] [AGAIN] [ALIAS cTableAlias] [EXCLUSIVE] [SHARED]
SignoSignificaEn ping
sin corchetesobligatorionombre_destino: tienes que decir a quién haces ping
[ ]opcional[-t]: puedes ponerlo o no
palabra después de una opciónel valor que tienes que poner tú-n count: count es un número, el que quieras
a | buna cosa u otra, no las dos[-j host-list] | [-k host-list]

[-t] es una bandera opcional. [-n count] es una opción opcional con valor. nombre_destino va sin corchetes y al final: es el posicional obligatorio. Es lo mismo que [IN nWorkArea | cTableAlias] en USE: puedes no poner IN, y si lo pones, el área va por número o por alias, no con las dos cosas.

Hay dos signos más que vas a ver a menudo:

  • < > alrededor de una palabra quiere decir «aquí va un valor». Es otra forma de escribir lo mismo que count en la línea de ping.
  • ... después de algo quiere decir que se puede repetir.

La línea de uso de git log -h los tiene los dos:

usage: git log [<options>] [<revision-range>] [[--] <path>...]

Todo es opcional. <path>... son uno o varios ficheros, y [--], el doble guion de la entrega 2, va delante si quieres. Los corchetes pueden ir unos dentro de otros: [[--] <path>...] quiere decir que puedes no poner ficheros, y que si los pones, el -- sigue siendo opcional.

Debajo de la línea de uso viene la lista de opciones, una por línea, con lo que hace cada una. La de ping empieza así:

Opciones:
 -t                  Hacer ping al host especificado hasta que se detenga.
                     Para ver estadísticas y continuar, presione
                     Ctrl-Interrumpir; para detener, presione Ctrl+C.
 -a                  Resolver direcciones en nombres de host.
 -n count            Número de solicitudes de eco para enviar.

Y muchas ayudas acaban con ejemplos. Los de tasklist /? son de lo más útil de su ayuda, porque enseñan combinaciones que funcionan:

TASKLIST /V /FO CSV
TASKLIST /SVC /FO LIST
TASKLIST /S sistema /FO LIST

Una salida para personas y otra para máquinas

En esos ejemplos aparece /FO, el formato de salida. En tasklist /? se explica así:

/FO    formato            Especifica el formato de salida.
                          Valores válidos: "TABLE", "LIST", "CSV".

«Valores válidos» es la forma larga de escribir TABLE | LIST | CSV. Si pones otro, tasklist no lo intenta:

Error: Sintaxis no válida. El valor "xml" no está permitido para la opción "/fo".
Escriba "TASKLIST /?" para su uso.

La tabla es para leerla tú. El CSV es para otro programa:

tasklist /fi "imagename eq explorer.exe" /fo csv
"Nombre de imagen","PID","Nombre de sesión","Núm. de sesión","Uso de memoria"
"explorer.exe","8828","Console","1","429.304 KB"

Y un CSV lo sabes leer desde VFP:

Los procesos de Windows, en un cursor de VFP
RUN tasklist /fi "imagename eq explorer.exe" /fo csv > procesos.csv
CREATE CURSOR procesos (imagen C(40), pid I, sesion C(20), numses I, memoria C(20))
APPEND FROM procesos.csv TYPE CSV
BROWSE

Ojo con un detalle: APPEND FROM ... TYPE CSV da por hecho que la primera línea es la cabecera y se la salta. Si le pides a tasklist el CSV sin cabecera (con /NH), TYPE CSV se come tu único dato y el cursor queda vacío. Sin cabecera, usa TYPE DELIMITED.

Hoy el formato para máquinas que más vas a ver es JSON, con opciones como --format json o --json. La idea es la misma: la salida normal está pensada para leerla en pantalla, y la de máquinas no cambia aunque el programa cambie su presentación. Para leer JSON desde VFP hace falta un analizador, como JSONFox.

Qué tiene que llevar la ayuda de un programa tuyo

Si algún día escribes un programa de consola (en la entrega 5 lanzamos uno desde VFP, y un .exe de VFP también puede serlo), esto es lo que un usuario espera encontrarse. Un ejemplo para un programa imaginario que manda facturas por correo:

facturas: envía por correo las facturas pendientes

Uso: facturas enviar [--desde <fecha>] [--hasta <fecha>] [--prueba] [--format table|json]

Opciones:
  --desde <fecha>    Primera fecha de emisión, AAAA-MM-DD. Por defecto, hoy.
  --hasta <fecha>    Última fecha de emisión. Por defecto, la de --desde.
  --prueba           Enseña qué enviaría, sin enviar nada.
  --format <f>       table (por defecto) o json.
  -h, --help         Esta ayuda.
  --version          La versión del programa.

Ejemplos:
  facturas enviar --prueba
  facturas enviar --desde 2026-09-01 --hasta 2026-09-30

Códigos de salida:
  0  todo enviado
  1  alguna factura no se pudo enviar (salen por el canal de error)
  2  la línea de órdenes no es válida

Y alrededor de la ayuda, unas cuantas costumbres que se agradecen:

  • --help, -h y /? funcionan en todos los comandos, y facturas enviar --help explica solo enviar.
  • Un error de uso dice cómo pedir la ayuda, como hace tasklist con «Escriba “TASKLIST /?” para su uso», y termina con un código distinto de 0 sin hacer nada.
  • Los valores por defecto están escritos. «Por defecto, hoy» ahorra una pregunta.
  • Los datos van por la salida y los mensajes por el error (entrega 3), para que el JSON salga limpio.
  • Lo que no tiene vuelta atrás tiene un modo de prueba, como --prueba, o pide confirmación.

Una advertencia al leer ayudas ajenas: pedir la ayuda no siempre termina con código 0. ping /? y tasklist /? salen con 0, pero git log -h sale con 129, porque git trata la petición de ayuda como un uso incorrecto. No uses la ayuda para comprobar en un script si un programa está instalado; para eso está --version.

Para practicar

Esta es la línea de uso de where /?:

WHERE [/R dir] [/Q] [/F] [/T] patrón...

Antes de probar nada, contesta: ¿qué es obligatorio? ¿Qué opción lleva valor? ¿Cuántos patrones puedes poner? Luego compruébalo:

where /?
where notepad
where notepad calc
where /r C:\Windows\System32 ping.exe
tasklist /fo list /fi "imagename eq explorer.exe"
tasklist /fo xml

En la última entrega, la 5, juntamos todo desde VFP: lanzar un programa de consola, esperar a que acabe o no, recoger lo que escribe por cada canal y leer su código de salida.