我正在尝试编写一个 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 /c
count 发生次数时,事情就崩溃了。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"""
我尝试在每个双引号前面加上单引号,但是没有效果。