如何使用批处理脚本检查文本文件是否包含域名

问题描述 投票:0回答:1

`我目前正在努力检查文本文件是否包含域名,如果包含,我将显示域名的 IP 地址,如果不包含,我想要一条错误消息“在此找不到域名”要显示的文件”

我尝试向我的代码发送文本,看看如果输入没有域名的文件,它是否显示正确的错误消息,但它没有 这是我的代码

for /f "tokens=*" %%G in (%FILENAME%) do (
     nslookup %%G >nul &1
     if "!errorlevel!"=="0" (
          echo Domain Name: %%G
          set ip=
          for /f "tokens=1*" %%H in ('nslookup  %%G 2^>nul ^|more +3 ^| findstr /R /C:"[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*"') do (
               if !ip! equ 1 (
                    echo IP Address: %%H
                    set ip=
               ) else (
                    echo %%H
               )
          )
          echo ---------------------------
     )
) 
    
if not "%errorlevel%"=="0" (
     echo No domain names found in this file
     exit /b
)

:end
exit /b
windows batch-file
1个回答
0
投票

仅在循环之后检查 if 条件中 errorlevel 的使用。此检查无法充分确定是否处理了任何有效域,因为它仍然仅受上次执行 nslookup 的影响。该脚本假定文件中的任何行都是域名,而不对其进行验证。在尝试 nslookup 之前,您可能需要添加模式检查以确保该行可能是域名。

@echo off
setlocal enabledelayedexpansion

set FILENAME=yourfile.txt
set found=0

for /f "tokens=*" %%G in (%FILENAME%) do (
    nslookup %%G >nul 2>&1
    if "!errorlevel!"=="0" (
        set found=1
        echo Domain Name: %%G
        for /f "tokens=2 delims=: " %%H in ('nslookup %%G 2^>nul ^| findstr /R /C:"Address: [1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*"') do (
            echo IP Address: %%H
        )
        echo ---------------------------
    )
)

if "!found!"=="0" (
    echo No domain names found in this file.
)

endlocal
© www.soinside.com 2019 - 2024. All rights reserved.