Batch file 批处理文件检查ipconfig | find/i语句的多个条件

Batch file 批处理文件检查ipconfig | find/i语句的多个条件,batch-file,if-statement,ipconfig,Batch File,If Statement,Ipconfig,我有以下批处理文件来检查计算机的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=

我有以下批处理文件来检查计算机的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构造一样。但很显然还有更多的问题,我想不出来。调整后的代码哪里出错?为什么出错?

我建议您最好解析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