2013-01-17 163 views
1

在討論批處理文件中的分割行時,有不少文章討論了分割行,但我無法完全滿足需求。我想要一個包含IP列表集的屬性文件,然後在批處理文件中處理這些列表。因此,一個屬性文件這樣的事情(我不想在一行內名單可能會有相當多的和一行將難以閱讀):處理具有多行變量的批處理文件

IPLIST_1=^ 
12.34.56.1^
21.43.65.2^
5.8.001.3 

IPLIST_2=^ 
222.11.33.1^
10.1.1.2 

和做一個批處理文件像這樣:

setlocal EnableDelayedExpansion 
FOR /f "delims=" %%x in (iplists.txt) DO (set "%%x") 
FOR %%A IN (%IPLIST_1%) DO (
some stuff 
) 

但它不工作,因爲我希望。如果我有這樣的一切批處理文件就可以了:

FOR %%A IN (^ 
12.34.56.1^
21.43.65.2^
5.8.001.3) DO (
some stuff 
) 

感謝, 保羅

+0

你的意思是'SET IPLIST_1 = ...'? (在你的例子中沒有'set',這是一個錯字還是你的真實代碼?(在後一種情況下它不應該)) –

+0

嗨安東。第一個FOR循環設置IPLIST_1和IPLIST_2,然後第二個FOR循環打算通過IPLIST_1中的IP。無論如何,這是意圖。 – user265330

+0

我的意思是,有一個命令__SET__用於設置變量。 'SET NAME = VALUE'沒關係,但沒有設置的'NAME = VALUE'是一個錯誤。你的真實代碼中有'SET'關鍵字嗎? –

回答

0
@echo off 
set "LIST=" 
for /f "tokens=1 delims=^^" %%I in (iplists.txt) do (

    setlocal enabledelayedexpansion 
    echo %%I | find "IPLIST_" && for %%P in (!LIST!) do (something with %%P) & ( set "IPLIST_=") 
    echo %%I | find "IPLIST_" || (set "LIST=!LIST! %%I") 
    endlocal 

) 

這是很難了解您所擁有here.My假設:

  1. 你有文件iplists.txt

  2. 你想要蝙蝠解釋每個l IST的整體利益,但是,該IP地址是在不同的行,所以你試着用^使他們團結起來(這是fultile其實)

  3. 要處理每個列表在for循環

以上代碼是我的提議 - 在外環中,轉義了^ - 您根本不需要它們,但它們不會受到傷害。您不能像在批處理腳本中一樣將列表合併到一行中。


有了第一對我開始通過line.I閱讀LIST.TXT線已初步傳遞給內一個空列表 - 但迭代項目進行空間分離,如果沒有這樣它會沒做什麼。 setlocal enabledelayedexpansion用於在括號內的LIST中進行更改。與兩個echo %%I | find "IPLIST_"我正在執行條件執行。如果行%% I不包含IPLIST_字符串,則第二行將被執行,並且LIST將隨下一個IP擴展。如果它包含「IPLIST_」,將執行第一行,列表將由內部FOR處理並最終刪除。然後我們再次開始,直到文件結束。