batch-file - script - para que sirven los archivos batch
¿Por qué algunos comandos procesan líneas de datos STDIN redirigidos que ya están siendo consumidos por otros comandos? (0)
Supongamos que tenemos el siguiente fragmento de código con un archivo de texto sample.txt
redirigido a STDIN
:
@echo off
< "sample.txt" (
set /P "ONE="
set /P "TWO="
findstr /R "^"
)
echo %ONE%, %TWO%
... y el contenido del archivo de texto relacionado sample.txt
:
first
second
third
fourth
La salida devuelta en la consola va a ser esta, que es exactamente lo que espero (las líneas first
y second
son consumidas por set /P
, por lo que findstr
recibe y procesa las líneas restantes):
third fourth first, second
La misma salida se logra cuando findstr /R "^"
se reemplaza por sort /R
Sin embargo, al reemplazar la línea de comando de findstr
por find /V ""
o por more
, la salida será:
first second third fourth first, second
Parece que aunque set /P
ya consumió las líneas first
y second
cual es probado por la última línea de salida, find
y aún more
recibe los datos redirigidos completos.
¿Por qué es esto? ¿Qué causa este comportamiento? ¿Hay alguna manera de forzar el find
o more
para recibir solo los datos reorientados restantes que no han sido procesados por un comando anterior?
(El comportamiento es el mismo cuando se redirigen los datos de salida STDOUT
a un archivo de texto. Además, al ejecutar directamente una línea de comando similar al código de lote anterior en cmd
, nada cambia).