分析文件和调用函数

时间:2015-03-23 21:17:22

标签: file batch-file if-statement for-loop call

我写了一个批处理脚本,我有一点问题。

基本上,我有一个带有IP(%ip_file%)的文件“ip_file.txt” 我的脚本解析此文件,并根据IP调用特定程序。

以下是我编写脚本的方法,但它不起作用。

REM START SCRIPT BASE

for /f %%i in (%ip_file%) do ( 
IF %%a.%%b.==10.10 call :script_1 %%i 
IF %%a.%%b.==192.168 call :script_2 %%i 
) 
else ( call :script_0 %%i) 

REM END SCRIPT BASE

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

for /f %%i in (%ip_file%) do (
set ip=%%i 
if %ip:~0,5%==10.10 call :script_1 %%i 
if %ip:~0,7%==192.168 call :script_2 %%i 
) 
else ( call :script_0 %%i)

答案 1 :(得分:1)

假设%ip_file%引用的文件内容是IPv4地址列表(或者至少每行以IPv4地址开头),您可以使用tokensdelims分开.

@echo off
setlocal

REM // START MAIN RUNTIME

set "ip_file=path\to\ip_file.txt"

for /f "usebackq tokens=1-4 delims=." %%a in ("%ip_file%") do ( 

    if "%%a.%%b"=="10.10" (

        call :script_1 %%a.%%b.%%c.%%d

    ) else if "%%a.%%b"=="192.168" (

        call :script_2 %%a.%%b.%%c.%%d

    ) else call :script_0 %%a.%%b.%%c.%%d
)

goto :EOF
REM // END MAIN RUNTIME

:script_0 <ip>
rem // catch-all
goto :EOF

:script_1 <ip>
rem // handle 10.10 addresses
goto :EOF

:script_2 <ip>
rem // handle 192.168 addresses
goto :EOF

还应该注意,当你call :label标签以冒号开头时,你在同一个批处理脚本中调用一个子程序。如果您确实在调用外部批处理脚本,请不要使用冒号。