Powershell: Pipe external command output to another external command -


how can powershell understand type of thing:

robocopy.exe | find.exe "started" 

the old command processor gave result, i'm confused how in powershell:

&robocopy | find.exe "started"                #error &robocopy | find.exe @("started")             #error &robocopy @("|", "find.exe","started")        #error &robocopy | &find @("started")                #error &(robocopy | find "started")                  #error 

essentially want pipe output of 1 external command external command. in reality i'll calling flac.exe , piping lame.exe convert flac mp3.

cheers

tl;dr

robocopy.exe | find.exe '"started"'    # note nested quoting. 

for explanation of nested quoting, read on.


powershell does support piping , external programs.

the problem here 1 of parameter parsing , passing: find.exe has curious requirement search term must enclosed in literal double quotes.

in cmd.exe, simple double-quoting sufficient: find.exe "started"

by contrast, powershell default pre-parses parameters before passing them on , strips enclosing quotes, find.exe sees started, without double quotes, resulting in error.

there 2 ways solve this:

  • ps v3+ (only option if parameters literals and/or environment variables): special parameter --% tells powershell pass rest of command line as-is target program (reference environment variables, if any, cmd-style (%<var>%)):
    robocopy.exe | find.exe --% "started"

  • ps v2-, or if need use powershell variables in parameters: apply outer layer of powershell quoting (powershell strip single quotes , pass contents of string as-is find.exe, enclosing double quotes intact):
    robocopy.exe | find.exe '"started"'


Comments

Popular posts from this blog

java.util.scanner - How to read and add only numbers to array from a text file -

rewrite - Trouble with Wordpress multiple custom querystrings -