【问题标题】:Batch script for loop & nslookup循环和 nslookup 的批处理脚本
【发布时间】:2016-03-11 21:22:08
【问题描述】:

我之前看到过这个问题,但没有一个解决方案能解决我的问题。我只是想遍历一个包含主机名的文本文件。当我从命令行尝试相同的命令(省略额外的百分号)时,它将工作一次或两次,然后给出下面提到的错误。将其作为批处理文件运行,批处理文件不执行任何操作就退出。这个真的把我难住了。

这是我的批处理文件中的代码:

@echo off
set OUTPUTFILE=Results/Results.txt
set lookup=HostNames.txt
FOR /F %%i in (%lookup%) do 
FOR /F "usebackq skip=3 delims=: tokens=2" %j in (`nslookup %i`) 
do @echo %%i %%j >> %OUTPUTFILE%

在命令行我得到:

i`) 在此时出乎意料。

当我在命令行中运行它时,我会去掉它在批处理文件中运行时所需的额外百分号。我还在命令行中使用了绝对路径,以确保这不是我设置的环境变量的问题。

【问题讨论】:

    标签: windows batch-file for-loop cmd nslookup


    【解决方案1】:
    @echo off
    set OUTPUTFILE=Results\Results.txt
    set lookup=HostNames.txt
    FOR /F %%i in (%lookup%) do ( 
     FOR /F "skip=3 delims=: tokens=2" %%j in ('echo(^|nslookup %%i') do @echo %%i %%j >> %OUTPUTFILE%
    )
    

    问题: /是winbatch中的一个开关; \ 是目录级分隔符。

    do ( 必须与其for 在同一物理行上

    %i 应该是%%i

    %j 应该是%%j

    我已删除 usebackq 并将引号从反引号更改为单引号,因为此处不需要使用 usebackq


    (添加了一些小修复)

    “闪烁的光标”是由nslookup 从键盘请求信息引起的。添加echo( 会提供一个换行符来终止nslookup,而^| 是一个转义管道,它将echo 的输出定向到nslookup 的输入。

    由于我的设置与你的完全不同,我只能进行原始验证。

    【讨论】:

    • 你忘了在这里设置双倍百分比nslookup %i
    • 感谢 npocmaka 和 Magoo。我认为这更接近,但似乎仍然没有工作。 @Magoo 我尝试了您的更正,现在我在运行批处理文件时得到以下输出:` (FOR /F "skip=3 delims=: tokens=2" %j in ('nslookup HOSTNAME_EDITED') do @echo HOSTNAME_EDITED %j 1>>Results\Results.txt ) 命令的语法不正确。 `
    • 当我设置“nslookup %%i”时,我得到一个闪烁的光标。
    • 感谢您提供的脚本,该脚本很有用且高度可配置。太好了!
    【解决方案2】:

    @Magoo 为我的需求提供了最佳答案。一旦我解决了一个主要问题,批处理文件就会按预期工作:孩子们,不要用 Windows 内部命令名称命名您的批处理文件。我将批处理文件称为“nlookup.bat”,这会导致严重的脑损伤;我不会很快忘记的一课。

    谢谢大家,现在运行良好!

    【讨论】:

    • 我遇到了同样的问题,并且对输出和无法执行 ctrl+c 来阻止它感到非常困惑。
    • 你让我免于严重的脑损伤。
    【解决方案3】:

    我修改了 Magoo 的答案以输出到 CSV 文件。它将输出两列“#, Input, Output”,其中每个成功的 nslookup 调用都有两行,一列带有主机名,另一列带有 IP。我还修改了分隔符以分隔“:”和“”,以便输出没有一堆额外的空格。我想将每个查询包含在单行中,其中包含“输入、主机名、IP”列,但我很沮丧,所以我只是在循环中添加了一个计数器并将其作为每个单独查询的第一列输出,并认为这已经足够好了。

    @echo OFF
    setlocal enabledelayedexpansion enableextensions
    set me=%~n0
    set parent=%~dp0
    set outputfile=%parent%nslookup_results.csv
    set inputfile=%parent%nslookup_input.txt
    @echo #,Input,Output >> %outputfile%
    FOR /F %%G in (%inputfile%) do (
     set /a resultcount+=1
     FOR /F "skip=3 tokens=2 delims=: " %%J in ('echo(^|nslookup %%G') do @echo !resultcount!,%%G,%%J >> %outputfile%
    )
    

    【讨论】:

      【解决方案4】:

      试试这样:

      @echo off
      set "OUTPUTFILE=Results\Results.txt"
      set "lookup=HostNames.txt"
      FOR /F %%i in (%lookup%) do  (
          FOR /F "usebackq skip=3 delims=: tokens=2" %%j in (`nslookup %%i`) do (
              @echo %%i %%j >> %OUTPUTFILE%
          )
      )
      

      【讨论】:

      • 谢谢!我认为 ('nslookup %%i') 中的语法不正确 当我设置“nslookup %%i”时,我得到一个闪烁的光标。
      猜你喜欢
      • 2011-02-05
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 2011-08-26
      • 2017-02-03
      • 1970-01-01
      • 2013-10-01
      • 2011-06-07
      相关资源
      最近更新 更多