2016-03-11 3 views
0

Я уже видел этот вопрос, но ни одно из решений не касается моей проблемы. Я просто пытаюсь выполнить итерацию через текстовый файл, содержащий имена хостов. Когда я пытаюсь выполнить ту же команду (исключая лишние знаки процента) из командной строки, она будет работать один или два раза, а затем дать ошибку, указанную ниже. Выполняя его как пакетный файл, пакетный файл выходит без каких-либо действий. Это меня очень насторожило.Пакетный скрипт для loop & 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% 

В командной строке я получаю:

i`) было неожиданным в это время.

Когда я запускаю его в командной строке, я беру дополнительные процентные знаки, необходимые для запуска в пакетном файле. Я также использую абсолютные пути в командной строке, чтобы убедиться, что это не проблема с переменными среды, которые я установил.

ответ

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.

Поскольку моя установка радикально отличается от вашей, я могу сделать только примитивную проверку.

+0

вы забыли установить двойной процент здесь 'nslookup% i' – npocmaka

+0

Спасибо npocmaka & Magoo. Это ближе, я думаю, но по-прежнему не работает. @Magoo Я попробовал свои исправления, теперь я получаю следующий вывод при запуске командного файла: ' (FOR/F" skip = 3 delims =: tokens = 2 "% j in ('nslookup HOSTNAME_EDITED') do @echo HOSTNAME_EDITED% j 1 >> Results \ Results.txt) Синтаксис команды неверен. ' –

+0

Когда я устанавливаю« nslookup %% i », я получаю мигающий курсор. –

0

попробовать так:

@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% 
    ) 
) 
+0

Спасибо! Я не думаю, что это правильный синтаксис в ('nslookup %% i') Когда я устанавливаю «nslookup %% i», я получаю мигающий курсор. –

0

@ У Magoo был лучший ответ для моих нужд. Пакетный файл работает по назначению, как только я исправил основную проблему: «Дети», НЕ НАЗНАЧИТЬ ваш командный файл с именем внутренней команды Windows. Я назвал пакетный файл «nlookup.bat», который вызвал повреждение мозга MAJOR; урок, который я скоро не забуду.

Спасибо, все хорошо работает!

0

Я изменил ответ 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% 
) 
Смежные вопросы