[英]Batch script for 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%
在命令行中,我得到:
我`)這一次是出乎意料的。
當我在命令行中運行它時,我將在批處理文件中運行時取出其他百分號需要。 我還在命令行中使用了絕對路徑,以確保這與我設置的環境變量無關。
@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
的輸入。
由於我的設置與您的設置完全不同,因此我只能進行原始驗證。
我修改了Magoo的答案以輸出到CSV文件。 它將輸出兩列“#,Input,Output”,其中每個成功的nslookup調用將有兩行,其中一列具有主機名,一列具有IP。 我還修改了delims以在“:”和“”上定界,以使輸出中沒有一堆多余的空格。 我想將每個查詢包含在具有“輸入,主機名,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%
)
嘗試這樣:
@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”,它導致了大腦的嚴重損害; 一個教訓,我不會很快忘記。
謝謝大家,現在一切順利!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.