管道中的“FIND:参数格式不正确”和“FINDSTR:写入错误”

管道中的“FIND:参数格式不正确”和“FINDSTR:写入错误”

我正在尝试编写一个 Windowscmd.exe脚本来计算aes从命令行编译程序后。它只是一个审计/QA脚本,以确保我们得到我们期望的结果。

当我findstr不使用管道时,它似乎工作正常:

cryptopp-5.6.3>dumpbin /disasm Win32/cryptlib/Debug/rijndael.obj | findstr aes
  000000C1: 66 0F 3A DF C0 00  aeskeygenassist xmm0,xmm0,0
  00000206: 66 0F 3A DF C0 00  aeskeygenassist xmm0,xmm0,0
  00000345: 66 0F 38 DB 04 81  aesimc      xmm0,xmmword ptr [ecx+eax*4]
  00000366: 66 0F 38 DB 04 81  aesimc      xmm0,xmmword ptr [ecx+eax*4]
  0000039F: 66 0F 38 DB 04 81  aesimc      xmm0,xmmword ptr [ecx+eax*4]
  00000078: 66 0F 38 DC C8     aesenc      xmm1,xmm0
  000000AB: 66 0F 38 DC C8     aesenc      xmm1,xmm0
  ...

当我将结果通过管道传递给find /ccount 发生次数时,事情就崩溃了。find它不仅没有按预期工作,而且还破坏了正在执行的findstr命令。

cryptopp-5.6.3>dumpbin /disasm Win32/cryptlib/Debug/rijndael.obj | findstr aes | find /c aes
FIND: Parameter format not correct
FINDSTR: Write error

根据find /?

If a path is not specified, FIND searches the text typed at the prompt
or piped from another command.

如何将 的输出通过管道传输findstr到 的输入find

答案1

在 的参数上使用引号find /c "foo"

答案2

我能够直接用这个语法做我需要做的事情:

find.exe """Find This""" *.log

对于三重双引号,我认为其中 2 个被 POSH 占用,而留下单引号供 FIND 查看。这在 Server 2012 R2 上对我来说运行良好。

答案3

这也有效:

find `"keyword`"

答案4

当我尝试使用 powershell 在 netstat 输出中查找特定端口号时,user2526332 发布的三重双引号解决方案也是对我唯一有效的方法。当我不对 netstat 使用任何参数时,它与一对双引号配合使用效果很好:

netstat | find "1723"

但是这个继续监听了很长时间,所以我想对 netstat -an 做同样的操作,然后我得到了错误“FIND: 参数格式不正确”。 TRIPLE 双引号解决了这个问题:

netstat -an | find """1723"""

我尝试在每个双引号前面加上单引号,但是没有效果。

相关内容