我之前看过这个问题,但没有解决我的问题。 我只是试图遍历包含主机名的文本文件。 当我从命令行尝试相同的命令(省略额外的百分号)时,它将工作一两次然后给出下面指出的错误。 将其作为batch file运行,batch file将不做任何事情而退出。 这一个真的难倒我。
以下是我的batch file中的代码:
@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%
在一个命令行我得到:
我)在这个时候是意外的。
当我在命令行中运行它时,我将在batch file中运行时取出其他百分号。 我也在命令行中使用绝对path,以确保这不是我设置的环境variables的问题。
@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 (
必须与其所在的物理线路相同)
%i
应该是%%i
%j
应该是%%j
我删除了usebackq
,并将引号从反引号改为单引号,因为在这里没有必要使用usebackq
。
(添加小修正)
“闪烁的光标”是由nslookup
从键盘请求信息引起的。 添加echo(
提供一个换行符来终止nslookup
而^|
是一个逃逸管道,它将该echo
的输出引导到nslookup
的输入。
由于我的设置与您的设置截然不同,我只能做原始验证。
尝试像这样:
@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% ) )
@Magoo对我的需求有最好的答案。 一旦我解决了一个主要问题,批处理文件就像预期的那样工作:孩子们,不要用windows内部命令名命名你的批处理文件。 我曾经叫过批处理文件“nlookup.bat”,造成重大脑损伤; 一个教训,我不会很快忘记。
谢谢大家,现在工作很好!
我修改了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% )