奇怪的batch file问题

有人可以帮我这个吗? 我有一个batch file,我试图根据当前的内部IP地址连接一对networking驱动器。 问题是,它正在输出以下内容:

首页192.168.2.99地下室

它应该只是输出:Home 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专业版

Call旨在调用您当前所在的一个不同的批处理文件(请参阅此处 )。 如果它传递了一个标签,它将从该标签执行,但是它会执行到文件末尾,所以当它到达ConnectBasement行时不会停止。

你可能需要的是在文件底部添加一个标签:END ,在你的:ConnectBasement行之前添加Goto :END 。 为了一致性,我可能会建议使用Goto而不是Call 。 (如果您愿意的话,您也可以使用Goto :EOF而无需定义标签。)

(或者,学习PowerShell并使用其功能来实现这个更干净;-))

进入ConnectHome之后,它会转到:ConnectBasement。 添加goto :eof就在@echo Home %LOCAL_IP%

ConnectHome部分之后,您是否忘记停止执行? 我不确定,但是我认为这批作品在那之后继续印刷“地下室”。

编辑:Jeroen打我:)