在批处理文件中使用 netcat 为什么即使重定向时输出仍保留在控制台中?

Using netcat in a batch file why the output remains in the console even when redirected?

我有一个批处理文件和下面的代码摘录。 该代码用于测试特定主机上的端口。

下面显示的代码有一个故意错误 (wwww.google.com),我试图将其重定向到一个文件以供以后处理。即使我将所有输出重定向到文件,以下内容仍显示在控制台中:

"wwww.google.com: forward host lookup failed: h_errno 11001: HOST_NOT_FOUND"

我想在文件中捕获此错误,而不是将其显示到控制台...不确定为什么重定向不起作用?

@echo off
set tempFile=%temp%\temp

call :CheckPort "wwww.google.com" "80"
GOTO :EOF

:CheckPort
nc -z %~1 %~2^>%tempFile% 2^>^&1
EXIT /B 0

字符的转义会破坏管道。而是做:

nc -z %~1 %~2 > %tempFile% 2>&1

这会将 STDERR 重定向到 STDOUT 并将 STDOUT 重定向到文件,这意味着两者都将转到文件。