有人可以帮我这个吗?我有一个批处理文件,我试图根据我当前的内部IP地址连接几个网络驱动器。问题是,它输出如下:
首页192.168.2.99 地下室
应该只输出: 家192.168.2.99
以下是代码:
@echo off
@for /F "tokens=2 delims=:" %%i in ('"ipconfig | findstr IP | findstr 192."') do SET LOCAL_IP=%%i
@if ("%LOCAL_IP%" == "192.168.2.99") Call ConnectHome else (Call ConnectBasement)
:ConnectHome
@echo Home %LOCAL_IP%
:ConnectBasement
@echo Basement
@REM net use R: \\192.168.2.98\Storage
@REM net use S: \\192.168.2.98\MyStuff
@REM net use T: \\192.168.2.98\Server
我也尝试用以下代码替换IF语句:
@if ("%LOCAL_IP%" == "192.168.2.99") goto ConnectHome else (goto ConnectBasement)
和
@if ("%LOCAL_IP%" == "192.168.2.99") goto :ConnectHome else (goto :ConnectBasement)
结果总是一样的...... 操作系统是Windows 7 Pro
答案 0 :(得分:2)
Call
旨在从您当前所在的批处理文件中调用不同的批处理文件(请参阅here)。如果它传递了一个标签,它将从该标签执行,但它将执行到文件的末尾,因此当它到达:ConnectBasement行时它不会停止。
您可能需要在文件底部添加标签:END
,并在您的:ConnectBasement行之前添加Goto :END
。为了保持一致性,我建议您始终使用Goto
而不是Call
。 (如果您愿意,也可以使用Goto :EOF
而无需定义标签。)
(或者,学习PowerShell并使用其功能来更清晰地实现这一点; - ))
答案 1 :(得分:1)
转到:ConnectHome之后,它只会转到:ConnectBasement。在goto :eof
下面添加@echo Home %LOCAL_IP%
。
答案 2 :(得分:1)
您是否忘记在以下情况后停止执行:ConnectHome部分?我不确定,但我认为批次只是继续,打印“地下室”。
编辑:Jeroen打败了我:)