【问题标题】:Analyze a file and call function分析文件并调用函数
【发布时间】:2015-03-23 21:17:22
【问题描述】:

我写了一个批处理脚本,遇到了一点小问题。

基本上,我有一个带有 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

有什么想法吗?

【问题讨论】:

  • 您希望在 %%a 和 %%b 中出现什么?你在哪里定义它们?
  • 这是我的错。现在问题解决了

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


【解决方案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 标签以冒号开头时,您正在调用同一批处理脚本中的子例程。如果您确实在调用外部批处理脚本,请不要使用冒号。

【讨论】:

  • 我添加了这个:set ip=%%a.%%b.%%c.%%d 所以现在我使用!ip!调用我的脚本。比你再次
【解决方案2】:
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)

【讨论】:

  • 这也坏了。如果使用此子字符串提取方法,!ip:~0,n! 需要延迟扩展(以及 setlocal enabledelayedexpansion)。此外,else 需要在 if 语句的右括号旁边
  • 最后我决定使用令牌。非常感谢您的回答和建议。
猜你喜欢
  • 2014-05-03
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 2019-01-15
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多