如何从ExecDos :: exec获取输出

use*_*234 3 installer netstat nsis

当我netstat -a |find /C $portNumber在命令提示符下执行时,我得到给定端口号存在的总行数.

我想在任何变量中获得相同的计数,以便我可以检查NSIS中的端口是否已被占用或空闲.

我正在排除下面的命令,我尝试了很多方面,但是我无法在变量或堆栈中获得ExecDos :: exec的输出.

ExecDos::exec "netstat -a |find /C '$portNumber'| $output"
Run Code Online (Sandbox Code Playgroud)

And*_*ers 7

要启用shell行为,您必须执行cmd.exe /C yourcommand(或者扩展%ComSpec%ExpandEnvStrings但是如果不支持Win9x,则硬编码cmd.exe也可以)

或者您可以尝试使用ExecCmd插件为您执行此操作(但它具有较少的选项,因此您必须将输出重定向到文件)

nsExec::ExecToStack 使用cmd前缀也应该有效...

编辑:

这是一个工作示例(我使用nsExec,因为它是默认安装的一部分)

!include LogicLib.nsh
section
ExpandEnvStrings $0 %COMSPEC%
StrCpy $1 445 ;Port number
nsExec::ExecToStack '"$0" /C netstat -an|find /C ":$1"'
Pop $0
${If} $0 = 0
    Pop $0
    MessageBox mb_ok "Port count=$0"
${Else}
    ; Port not open...
${EndIf}
sectionend
Run Code Online (Sandbox Code Playgroud)