奇怪的批处理文件问题

时间:2012-07-25 13:35:25

标签: windows windows-7 batch-file windows-7-x64

有人可以帮我这个吗?我有一个批处理文件,我试图根据我当前的内部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

3 个答案:

答案 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打败了我:)