PowerShell管道进入find.exe命令


8

只是好奇,为什么会这样?如果我运行:

netstat -an | find "443"

进入命令提示符后,将显示“ 443”连接。如果我在PowerShell控制台或ISE中运行相同的命令,则会收到错误“ FIND:参数格式不正确”。netstat输出是否无法通过管道正确地找到在PS中?

注意:如果我运行netstat -an | findstr "443"netstat -an | select-string "443"在PS中运行,则工作正常。


跨站点重复:为什么不能在PowerShell中使用“查找”。最好select-string
Powershell中

Answers:


13

PowerShell会评估双引号内的内容以执行任何变量扩展,子表达式等,然后将其丢弃。PowerShell从"443"字面上返回的内容443(请注意缺少引号)。FIND.EXE 需要用双引号括起来的搜索字符串。

如果要防止PowerShell除去双引号,请使用重音符(`)使其转义。

netstat -a -n  | find `"443`"

您也可以使用--%参数执行转义。需要PowerShell 3+。

nestat -a -n | find --% "443"

我想知道为什么findstr.exe可以正常运行吗?
2016年

3
@Vic该findstr实用程序不需要在/C字符串参数中使用双引号:的findstr /C:somestring somefile工作原理也是如此findstr /C:"somestring" somefile。对于FIND,必须存在双引号。
jscott
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.