Windows 批量检查主机名是否存在
Windows Batch Check Hostname Exists
我想检查我的 PC 上是否存在主机名(即在 C:\Windows\System32\drivers\etc
下的 hosts
文件中找到)。
有没有办法使用批处理命令或其他方式查找它是否存在?
您可以做的是对您要查找的主机名执行 ping 操作,然后检查某些字符串,这将显示是否可以找到该主机名。看起来像这样(我猜):
@echo off
setlocal EnableDelayedExpansion
set /p input= "Hostname"
set hostexists=yes
For /f "tokens=1,2" %%a in ('ping -n 1 !input!') do (
if "x%%a"=="xFOO" if "x%%b"=="xBAR" set hostexists=no
)
If "x!hostexists!"=="xno" (
echo. "Does not exist"
) ELSE (
echo. "Does exist"
Pause
基本思路是,当您尝试 ping 一个不可用的主机名时,您将从命令行获得特定的输出。自己尝试一下:打开 cmd.exe(点击 Windows-按钮 +R 并键入 cmd
)并在命令行中写入 ping foobar
并稍等片刻。您应该会收到如下消息:Ping-Request 找不到 "foobar" [...]。您将前两个词放入代码中:第一个词到 FOO
,第二个词到 BAR
.
程序会检查 ping 命令的输出,并将前两个单词(=tokens)放入 %%a
和 %%b
检查它们是否等于所需的单词,标记主机不存在。
我希望这会有所帮助 :) 不确定这是否是您想要的 :D
问候
geisterfurz007
使用一些额外的信息尝试这个批处理文件:
@echo off
set "SearchString=localhost"
set "LogFile=%userprofile%\Desktop\LogFile.txt"
set "hostspath=%windir%\System32\drivers\etc\hosts"
(
Echo **************************** General info ****************************
Echo Running under: %username% on profile: %userprofile%
Echo Computer name: %computername%
Echo Operating System:
wmic os get caption | findstr /v /r /c:"^$" /c:"^Caption"
Echo Boot Mode:
wmic COMPUTERSYSTEM GET BootupState | find "boot"
Echo Antivirus software installed:
wmic /Node:localhost /Namespace:\root\SecurityCenter2 Path AntiVirusProduct Get displayName | findstr /v /r /c:"^$" /c:"displayName"
Echo Executed on: %date% @ %time%
Echo ********************* Hosts' File Contents with the string "%SearchString%" ************************
)>"%LogFile%"
for /f "delims=" %%a in ('Type "%hostspath%" ^| find /I "%SearchString%"') Do (
echo %%a >> "%LogFile%"
)
Start "" "%LogFile%"
更简单、更可靠的解决方案
url.bat:
@echo off
set url=%1
ping -n 1 %url% > nul 2> nul
if "%errorlevel%"=="0" (
echo %url% exists
) else (
echo %url% does not exist
)
测试
> url.bat google.com
google.com exists
> url.bat google.commmmmm
google.commmmmm does not exist
我想检查我的 PC 上是否存在主机名(即在 C:\Windows\System32\drivers\etc
下的 hosts
文件中找到)。
有没有办法使用批处理命令或其他方式查找它是否存在?
您可以做的是对您要查找的主机名执行 ping 操作,然后检查某些字符串,这将显示是否可以找到该主机名。看起来像这样(我猜):
@echo off
setlocal EnableDelayedExpansion
set /p input= "Hostname"
set hostexists=yes
For /f "tokens=1,2" %%a in ('ping -n 1 !input!') do (
if "x%%a"=="xFOO" if "x%%b"=="xBAR" set hostexists=no
)
If "x!hostexists!"=="xno" (
echo. "Does not exist"
) ELSE (
echo. "Does exist"
Pause
基本思路是,当您尝试 ping 一个不可用的主机名时,您将从命令行获得特定的输出。自己尝试一下:打开 cmd.exe(点击 Windows-按钮 +R 并键入 cmd
)并在命令行中写入 ping foobar
并稍等片刻。您应该会收到如下消息:Ping-Request 找不到 "foobar" [...]。您将前两个词放入代码中:第一个词到 FOO
,第二个词到 BAR
.
程序会检查 ping 命令的输出,并将前两个单词(=tokens)放入 %%a
和 %%b
检查它们是否等于所需的单词,标记主机不存在。
我希望这会有所帮助 :) 不确定这是否是您想要的 :D
问候
geisterfurz007
使用一些额外的信息尝试这个批处理文件:
@echo off
set "SearchString=localhost"
set "LogFile=%userprofile%\Desktop\LogFile.txt"
set "hostspath=%windir%\System32\drivers\etc\hosts"
(
Echo **************************** General info ****************************
Echo Running under: %username% on profile: %userprofile%
Echo Computer name: %computername%
Echo Operating System:
wmic os get caption | findstr /v /r /c:"^$" /c:"^Caption"
Echo Boot Mode:
wmic COMPUTERSYSTEM GET BootupState | find "boot"
Echo Antivirus software installed:
wmic /Node:localhost /Namespace:\root\SecurityCenter2 Path AntiVirusProduct Get displayName | findstr /v /r /c:"^$" /c:"displayName"
Echo Executed on: %date% @ %time%
Echo ********************* Hosts' File Contents with the string "%SearchString%" ************************
)>"%LogFile%"
for /f "delims=" %%a in ('Type "%hostspath%" ^| find /I "%SearchString%"') Do (
echo %%a >> "%LogFile%"
)
Start "" "%LogFile%"
更简单、更可靠的解决方案
url.bat:
@echo off
set url=%1
ping -n 1 %url% > nul 2> nul
if "%errorlevel%"=="0" (
echo %url% exists
) else (
echo %url% does not exist
)
测试
> url.bat google.com
google.com exists
> url.bat google.commmmmm
google.commmmmm does not exist