Powershell:将管道发送为命令的参数

时间:2018-09-11 14:35:30

标签: powershell foreach escaping pipe command-line-arguments

我正在处理如下所示的命令-

$command="Path to Command / Bat file"  
$delim = [RegEx]::Escape("|")

(Get-ChildItem -Path .\ -Force).Name | % { &"$command"
".\$_" "$delim" "..\<SomePath>\$_.html"}

在这种情况下,面对的是传递delim值,即Pipe。 Delim是我命令的第二个参数。

正在发生的是“ .. \\ $ _。html”正在作为可执行文件执行,但必须作为第三个参数传递。

2 个答案:

答案 0 :(得分:0)

得到我问题的答案。我们需要按以下方式使用它而不是正则表达式。这是因为“ c”引擎不支持正则表达式分隔符。

s as well and completely omit

答案 1 :(得分:0)

只需 quote #include<stdio.h> #include<string.h> int main(void) { int i,n,count=0; char f[30 + 1]; /* allocate one more element for storeing newline character */ char* lf; printf("Enter the string. : "); fgets(f, sizeof(f), stdin); /* change gets() to fgets() */ /* fgets() stores newline character while gets() doesn't, so remove it */ if ((lf = strchr(f, '\n')) != NULL) *lf = '\0'; n = strlen(f); for(i=0;i<n;i++) { if(f[i]==f[n-i-1]) count=count+1; } if(count==n) printf("\n Entered string is Palindrome"); else printf("\n Entered string is NOT Palindrome"); } 字符即可将其传递给外部程序。需要使用引号告诉 PowerShell |应该被按字面解释而不是管道运算符。

|

唯一需要做的工作就是目标程序本身未加引号的 PS> 'a|b' | & findstr /L '|' # findstr.exe sees a literal | char.; & is optional here a|b # Literal '|' was found in input string 'a|b' [1] 视为具有特殊功能。的含义,尤其是在调用|或批处理文件时:

cmd.exe

请注意嵌入双引号,这可确保PS> cmd /c echo '"|"' "|" cmd.exe视为自变量,因此不会将"|"解释为其< / em>管道运算符。
(在这种情况下,内部|命令的怪异之处是保留双引号。)


[1]即使在上面的 PowerShell 命令行中引用了echo,在幕后PowerShell仍将其传递给未引用,只要参数没有嵌入的空格