For loop 批量将txt文件中的行读入变量

For loop 批量将txt文件中的行读入变量,for-loop,if-statement,batch-file,For Loop,If Statement,Batch File,我试图弄清楚如何将IP地址从名为“IPList.txt”的文件读入批处理脚本中的单个变量 :DEFINITIONS set LOGFILE=IPScript.log set IPLIST=C:\IPLIST.txt echo Script Started >> %LOGFILE% goto SetIP :SetIP for /f "tokens=*" %%a in (%IPLIST%) do ( set FirstIP=%%a ) echo The first

我试图弄清楚如何将IP地址从名为“IPList.txt”的文件读入批处理脚本中的单个变量

:DEFINITIONS
set LOGFILE=IPScript.log
set IPLIST=C:\IPLIST.txt
echo Script Started >> %LOGFILE%
goto SetIP

:SetIP
for /f "tokens=*" %%a in (%IPLIST%) do (
set FirstIP=%%a
)
echo The first IP is %FirstIP% >> %LOGFILE%
exit

我在“IPscript.log”中得到的输出是“第一个IP是:”没有列出IP,只有一个空间。还有,有没有办法像这样设置多个IP,只在一个for循环中?

下面是一个快速示例来帮助您:

@Echo关闭
SetLocal EnableExtensions DisableDelayedExpansion
:定义本地变量
设置“IPLIST=C:\IPLIST.txt”
设置“LOGFILE=IPScript.log”
:检查源是否存在
对于%%G In(“%IPLIST%”),如果“%%~aG”Lss“-”(
回显文件%IPLIST%不存在。
Echo按任意键结束此脚本。
暂停1>NUL
后藤:EOF
)如果“%%~aG”GEq“d”(
Echo需要一个文件,但%IPLIST%是一个目录。
Echo按任意键结束此脚本。
暂停1>NUL
后藤:EOF
)
:取消定义\u局部\u变量
对于/F“Delims=”%%G In(”(设置IP[)2>NUL“)Do Set“%%G=”
:启动主机
设置“i=1000”
(
Echo脚本已启动
对于/F UseBackQ^Delims^=^EOL^=%%G In(“%IPLIST%”)Do(
设置/A i+=1
SetLocal EnableDelayedExpansion
对于%%H In(“!i:~-3!”)执行以下操作(
端部
设置“IP[%%~H]=%%%G”
回声IP[%%~H]为%%G
)
)
)1>%LOGFILE%
:检查\u IP\u变量\u是否存在
如果未定义IP[001](
Echo%IPLIST%没有可读的文件内容。
Echo按任意键结束此脚本。
暂停1>NUL
后藤:EOF
)
:查看\u IP\u变量
设置IP[
暂停和转到:EOF
如果您有一个现有的
%LOGFILE%
,并且您打算附加到它(而不是覆盖/创建一个),请将
1>%LOGFILE%
更改为
1>%LOGFILE%

如果您真的不需要
%LOGFILE%
,例如,您只是使用它进行测试,它看起来会更像这样:

@Echo关闭
SetLocal EnableExtensions DisableDelayedExpansion
:定义本地变量
设置“IPLIST=C:\IPLIST.txt”
:检查源是否存在
对于%%G In(“%IPLIST%”),如果“%%~aG”Lss“-”(
回显文件%IPLIST%不存在。
Echo按任意键结束此脚本。
暂停1>NUL
后藤:EOF
)如果“%%~aG”GEq“d”(
Echo需要一个文件,但%IPLIST%是一个目录。
Echo按任意键结束此脚本。
暂停1>NUL
后藤:EOF
)
:取消定义\u局部\u变量
对于/F“Delims=”%%G In(”(设置IP[)2>NUL“)Do Set“%%G=”
:启动主机
设置“i=1000”
Echo脚本已启动
对于/F UseBackQ^Delims^=^EOL^=%%G In(“%IPLIST%”)Do(
设置/A i+=1
SetLocal EnableDelayedExpansion
对于%%H In(“!i:~-3!”)执行以下操作(
端部
设置“IP[%%~H]=%%%G”
)
)
:检查\u IP\u变量\u是否存在
如果未定义IP[001](
Echo%IPLIST%没有可读的文件内容。
Echo按任意键结束此脚本。
暂停1>NUL
后藤:EOF
)
:查看\u IP\u变量
设置IP[
暂停和转到:EOF


两个示例中的最后一行都是为了显示。如果您在
cmd.exe
中测试/运行此脚本,则可以忽略它。

下面是一个快速示例以帮助您:

@Echo关闭
SetLocal EnableExtensions DisableDelayedExpansion
:定义本地变量
设置“IPLIST=C:\IPLIST.txt”
设置“LOGFILE=IPScript.log”
:检查源是否存在
对于%%G In(“%IPLIST%”),如果“%%~aG”Lss“-”(
回显文件%IPLIST%不存在。
Echo按任意键结束此脚本。
暂停1>NUL
后藤:EOF
)如果“%%~aG”GEq“d”(
Echo需要一个文件,但%IPLIST%是一个目录。
Echo按任意键结束此脚本。
暂停1>NUL
后藤:EOF
)
:取消定义\u局部\u变量
对于/F“Delims=”%%G In(”(设置IP[)2>NUL“)Do Set“%%G=”
:启动主机
设置“i=1000”
(
Echo脚本已启动
对于/F UseBackQ^Delims^=^EOL^=%%G In(“%IPLIST%”)Do(
设置/A i+=1
SetLocal EnableDelayedExpansion
对于%%H In(“!i:~-3!”)执行以下操作(
端部
设置“IP[%%~H]=%%%G”
回声IP[%%~H]为%%G
)
)
)1>%LOGFILE%
:检查\u IP\u变量\u是否存在
如果未定义IP[001](
Echo%IPLIST%没有可读的文件内容。
Echo按任意键结束此脚本。
暂停1>NUL
后藤:EOF
)
:查看\u IP\u变量
设置IP[
暂停和转到:EOF
如果您有一个现有的
%LOGFILE%
,并且您打算附加到它(而不是覆盖/创建一个),请将
1>%LOGFILE%
更改为
1>%LOGFILE%

如果您真的不需要
%LOGFILE%
,例如,您只是使用它进行测试,它看起来会更像这样:

@Echo关闭
SetLocal EnableExtensions DisableDelayedExpansion
:定义本地变量
设置“IPLIST=C:\IPLIST.txt”
:检查源是否存在
对于%%G In(“%IPLIST%”),如果“%%~aG”Lss“-”(
回显文件%IPLIST%不存在。
Echo按任意键结束此脚本。
暂停1>NUL
后藤:EOF
)如果“%%~aG”GEq“d”(
Echo需要一个文件,但%IPLIST%是一个目录。
Echo按任意键结束此脚本。
暂停1>NUL
后藤:EOF
)
:取消定义\u局部\u变量
对于/F“Delims=”%%G In(”(设置IP[)2>NUL“)Do Set“%%G=”
:启动主机
设置“i=1000”
Echo脚本已启动
对于/F UseBackQ^Delims^=^EOL^=%%G In(“%IPLIST%”)Do(
设置/A i+=1
SetLocal EnableDelayedExpansion
对于%%H In(“!i:~-3!”)执行以下操作(
端部
设置“IP[%%~H]=%%%G”
)
)
:检查\u IP\u变量\u是否存在
如果未定义IP[001](
Echo%IPLIST%没有可读的文件内容。
Echo按任意键结束此脚本。
暂停1>NUL
后藤:EOF
)
:查看\u IP\u变量
设置IP[
暂停和转到:EOF

两个示例中的最后一行都用于显示。如果您在
cmd.exe
中测试/运行此脚本,则可以忽略它

findstr
读取
filename1
中的文件,并生成格式列表
n:n行的内容

/f的
for
读取此列表,并使用2个令牌对其进行分区-
%%aFOR /f "tokens=1*delims=:" %%a IN ('findstr /n /r ".*" "%filename1%"') DO set "IP%%a=%%b"
)
set IP
if not defined firstip set "FirstIP=%%a"
set "IP%%a=%%b"&if "%%b" neq "" set "ipmax=%%a"
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "LOGFILE=%~dp0IPScript.log"
set "IPLIST=%~dp0IPLIST.txt"
set "AddressCount=0"
echo Script started>"%LOGFILE%"

for /F "delims==" %%I in ('set IP_Address_ 2^>nul') do set "%%I="
if exist "%IPLIST%" for /F "useback delims=" %%I in ("%IPLIST%") do (
    set /A AddressCount+=1
    call set "IP_Address_%%AddressCount%%=%%I"
)

if not %AddressCount% == 0 (
    if %AddressCount% == 1 (
        echo The IP address is:
    ) else echo The IP addresses are:
    echo/
    set IP_Address_
) >>"%LOGFILE%"
endlocal
C:\Windows\System32\cmd.exe /c set IP_Address_ 2>nul
set "IP_Address_!AddressCount!=%%I"