2013-01-17 124 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处理并最终删除。然后我们再次开始,直到文件结束。