windows - Hvorfor kan jeg ikke pipe 'hvor' output til 'type' i batch?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at udskrive indholdet af en batchfil, der findes i min vej.


Jeg kan finde filen med 'hvor':


> where myscript
C:scriptsmyscript.bat


Jeg kan vise indholdet af filen med 'type':


> type C:scriptsmyscript.bat
echo This is my script. There are many like it, but this one is mine.


Men når jeg vil være doven og bruge en enkelt kommando:


> where myscript | type
The syntax of the command is incorrect.


Baseret på nogle tests gjorde jeg, at det ser ud til, at 'hvor' output ikke kan røres ud og 'type' -indgangen ikke kan røres ind.


Kan nogen forklare, hvorfor det ikke virker på denne måde?


P. S. Jeg kunne gøre dette i Powershell: Get-Command myscript | Get-Content.

Bedste reference


Som @Luaan sagde i kommentarerne, accepterer type kun filnavnet som argument og ikke via dets indgangskanal. Så piping vandt ikke tricket i dit tilfælde. Du skal bruge en anden måde til at give resultatet af kommandoen where som et argument. Heldigvis kan for /f hjælpe dig med at behandle output fra andre kommandoer. For at udskrive filen, der svarer til udgangen af ​​kommandoen where, skal du bruge dette på kommandolinjen: [17]


FOR /F "delims=" \%G IN ('where myscript') DO type "\%G"


I en batch-fil skal du bruge


@echo off
FOR /F "delims=" \%\%G IN ('where myscript') DO type "\%\%G"

Andre referencer 1


Som udsat for Luaan og J.Baoby, kan ikke alle kommandoer hente sine argumenter fra et rør eller en omdirigering, men nogle af dem kan.


Bestemt ikke det nøjagtige output, men sandsynligvis den nærmeste syntaks i kommandolinjen


where myScript | findstr /f:/ "^"


Udgangen af ​​kommandoen where ledes til en findstr. /f -knappen bruges til at angive listen over filer, der skal søges, og skråstreget betyder, at listen skal læses fra standardindgangen. "^" er blot et almindeligt udtryk, der matcher alle linjerne i de filer, der er opregnet af where comamnd