"FIND: Parameter format not correct" and "FINDSTR: Write error" with Pipes

I'm trying to write a Windows cmd.exe script to count the occurrences of aes after compiling a program from the command line. Its simply an Audit/QA script to ensure we're getting what we expect.

When I use findstr without the pipe, it appears to work fine:

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 ...

As soon as I pipe the result to find /c to count occurrences, things blow up. Not only does find not work as expected, it manages to break the proceeding findstr command.

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

According to find /?:

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

How do I pipe the output of findstr to the input of find?

6 Answers

Use quotation marks on parameter of find /c "foo".

I was able to directly do what I needed to do with this syntax:

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

With the TRIPLE double quotes, I think 2 of them get consumed by POSH, leaving the single quote for FIND to see.. This worked fine for me on a Server 2012 R2..

5

This also works:

find `"keyword`"

The "string" parameter is compulsory in find. Try piping findstr to:

find /c /v ""

Whilst the multiple quotes works, another option may be to escape the quote, e.g. schtasks /query /tn "WMS Wait Monitor" /v /fo list | find `"Status:`"

There were helpful suggestions here. I needed to use this inside a forfiles loop and found that double quotes needed a backslash for it to work properly. Sample below:

cmd /C some_command | find /V \"something\"

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like