批量查找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%
我如何才能 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%