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 /?.-ho--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.
pingsin 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 --versiongit version 2.54.0.windows.1Có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_destinoParece 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]| Signo | Significa | En ping |
|---|---|---|
| sin corchetes | obligatorio | nombre_destino: tienes que decir a quién haces ping |
[ ] | opcional | [-t]: puedes ponerlo o no |
| palabra después de una opción | el valor que tienes que poner tú | -n count: count es un número, el que quieras |
a | b | una 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 quecounten la línea deping....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 LISTUna 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:
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
BROWSEOjo 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álidaY alrededor de la ayuda, unas cuantas costumbres que se agradecen:
--help,-hy/?funcionan en todos los comandos, yfacturas enviar --helpexplica soloenviar.- Un error de uso dice cómo pedir la ayuda, como hace
tasklistcon «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 xmlEn 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.