Read stdin stream in a batch file

前端 未结 4 721
春和景丽
春和景丽 2020-11-27 17:05

Is it possible to use a piped stdin stream inside a batch file?

I want to be able to redirect the output of one command into my batch file process.bat l

4条回答
  •  时光取名叫无心
    2020-11-27 17:28

    set /p doesn't work with pipes, it takes one (randomly) line from the input.
    But you can use more inside of an for-loop.

    @echo off
    setlocal
    for /F "tokens=*" %%a in ('more') do (
      echo #%%a
    )
    

    But this fails with lines beginning with a semicolon (as the FOR-LOOP-standard of eol is ;).
    And it can't read empty lines.
    But with findstr you can solve this too, it prefix each line with the linenumber, so you never get empty lines.
    And then the prefix is removed to the first colon.

    @echo off
    setlocal DisableDelayedExpansion
    
    for /F "tokens=*" %%a in ('findstr /n $') do (
      set "line=%%a"
      setlocal EnableDelayedExpansion
      set "line=!line:*:=!"
      echo(!line!
      endlocal
    )
    

    Alternatively, on some environments (like WinRE) that don't include findstr, an alternative with find.exe might suffice. find will accept a null search string "", and allows search inversion. This would allow something like this:

    @echo off
    setlocal DisableDelayedExpansion
    
    for /F "tokens=*" %%a in ('find /v ""') do (
      ...
    

提交回复
热议问题