Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 处理具有跨多行变量的批处理文件_Batch File_Dos - Fatal编程技术网

Batch file 处理具有跨多行变量的批处理文件

Batch file 处理具有跨多行变量的批处理文件,batch-file,dos,Batch File,Dos,有相当多的帖子讨论批处理文件中的拆分行,但我不能完全满足我的要求。我希望有一个包含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 "d

有相当多的帖子讨论批处理文件中的拆分行,但我不能完全满足我的要求。我希望有一个包含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
)
谢谢, 保罗

很难理解你这里有什么。我的假设是:

您有文件iplists.txt

您希望bat将每个列表解释为一整行,但是IP位于单独的行上,因此您尝试将它们与^this is fultile(这是fultile)结合起来

您希望在FOR循环中处理每个列表 上面的代码是我提供的-在外循环中,^是转义的-您根本不需要它们,但它们不会造成伤害。您不能像在批处理脚本中那样将列表合并到一行中


使用first for,我开始逐行读取list.txt。我有一个空列表,最初传递给内部for,但是迭代用空格分隔的项目,如果没有这样的列表,它将什么也不做。setlocal enabledelayedexpansion用于使列表中的更改在括号内可见。使用两个echo%%I | find IPLIST_uu,我将执行条件执行。如果行%%I不包含IPLIST\字符串,则将执行第二行,并使用下一个IP扩展列表。如果它包含IPLIST_uu,将在第一行执行,在该行中,列表将由INTERNAR FOR处理,并最终删除。然后我们将重新开始,直到文件结束。

您的意思是设置IPLIST_1=。。。?您的示例中没有设置,这是有问题的打字错误,还是您的真实代码?在后一种情况下,它不应该对安东起作用。第一个FOR循环设置IPLIST_1和IPLIST_2,第二个FOR循环则意味着要通过IPLIST_1中的IP。不管怎样,这就是目的。我的意思是,有一个用于设置变量的命令集。SET NAME=VALUE可以,但是NAME=VALUE不带SET是一个错误。你的真实代码中有SET关键字吗?没有,我没有SET。批处理文件中的第一个for循环读取属性并进行设置-即iplists.txt中的/f delims=%%x DO SET%%x行是iplists.txt中的SET.for%%A做了些什么?
@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

)