批量查找str return 唯一字段值

Batch findstr return only field value

我如何才能 return 仅批量命令中的值字段?例如:

ipconfig /all | findstr "Host Name"

会return

Host Name . . . . . . . . . . . . : YOUR_HOSTNAME

但我只想要值。在这种情况下,YOUR_HOSTNAME.

此外,如果有多个行,它应该从顶部开始匹配。

for /f "tokens=1*delims=:" %b in ( 'ipconfig /all ^| findstr /c:"Host Name"') do set "hostname=%c"
set "hostname=%hostname:~1%"

来自提示。将 %b%c 更改为 %%b%%c 以在批处理文件中使用。

插入符从管道中逸出,告诉 cmd 管道是要执行的命令的一部分,而不是 for.

/c:"Host Name" 使 findstr 找到精确的字符串 Host Name。如您所见,findstr 会找到 Host Name,这会带来成功在

Ethernet adapter VirtualBox Host-Only Network:
   Description . . . . . . . . . . . : VirtualBox Host-Only Ethernet Adapter

例如。

要强制第一个匹配项,请将 &goto label 附加到 for 命令行并在批处理文件中的两行之间插入 :label

如果您需要主机名,Windows 已经提供了一个程序,无需任何字符串解析即可准确给出。

"%__APPDIR__%HOSTNAME.EXE"

batch-file中使用它来设置变量。

FOR /F "delims=" %%A IN ('"%__APPDIR__%HOSTNAME.EXE"') DO (SET "THISHOST=%%~A")
ECHO THISHOST IS %THISHOST%

如果您想升级到 .Net 或 PowerShell,有:

[System.Net.Dns]::GetHostName()

那你肯定不相信,但是有一个环境变量叫%computername%

亲自尝试一下:

echo %computername%