0

我有以下批处理文件来检查计算机所在的 IP 范围,以确定是否需要启动 ABC.exe。

这很好用,因为所有 3 个办公地点的第一部分在其 IP 范围的开头共享相同的数字,直到第三个八位字节的第一个数字(10.41.1)我目前只是检查。

@ECHO OFF
SET OFFICE_ALL=10.41.1
REM SET OFFICE_1=10.41.168.
REM SET OFFICE_2=10.41.162.
REM SET OFFICE_3=10.41.172.

REM SET VPN_CONNECTION=10.36.

ipconfig | find /i " %OFFICE_ALL%" >nul 2>nul && ( 
  start C:\ABC-tool\ABC.exe 
) || (
  exit
) 

话虽如此,我们要搬到新位置,网络同事告诉我,新办公室的 IP 范围将变为 10.44.121.x。

我试图像这样调整我的脚本:

@ECHO OFF
SET OFFICE_MOST=10.41.1
REM SET OFFICE_1=10.41.168.
REM SET OFFICE_3=10.41.172.

SET OFFICE_2=10.44.121.

REM SET VPN_CONNECTION=10.36.

ipconfig | find /i " %OFFICE_MOST%" >nul 2>nul && ( 
  start C:\ABC-tool\ABC.exe 
) || ipconfig | find /i " %OFFICE_2%" >nul 2>nul && ( 
  start C:\ABC-tool\ABC.exe 
) || (
  exit
) 

但不知何故,这不起作用......我对||的理解 是它之后的代码只有在它之前的代码不成功时才会被执行,所以它基本上就像一个 if-else 构造。但显然还有更多,我无法弄清楚。调整后的代码在哪里以及为什么会出错?

4

1 回答 1

1

我建议您最好解析 ipconfig 输出以将 IPv4 存储在一个变量中
,并将点分隔的八位字节拆分为它们自己的变量。

:: Q:\Test\2018\06\27\SO_51066473.cmd
@Echo off&SetLocal EnableDelayedExpansion

For /f "tokens=2delims=:" %%I in (
    'ipconfig ^| findstr "[^n].IPv4.Add.*:"'
) Do (
    Set "IPv4=%%I"
    For /f "tokens=1-4delims=. " %%A in ("%%I"
    ) do set /A "OC1=%%A,OC2=%%B,OC3=%%C,OC4=%%D"
)
Set "IPv4=%IPv4:~1%"
Echo Your IPv4 Address is : [%IPv4%]
Echo the Octets are:
For /l %%L in (1,1,4) Do Echo=OC%%L=!OC%%L!

因此,您可以对全部或部分数字进行比较。

样本输出:

> SO_51066473.cmd
Your IPv4 Address is : [192.168.45.183]
the Octets are:
OC1=192
OC2=168
OC3=45
OC4=183
于 2018-06-27T18:19:43.020 回答