1

有人可以帮我解决这个问题吗?我有一个批处理文件,我试图根据我当前的内部 IP 地址连接几个网络驱动器。问题是,它输出以下内容:

家 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 Pro

4

3 回答 3

2

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

您可能需要:END在文件底部添加一个标签,Goto :END就在您的 :ConnectBasement 行之前。为了保持一致性,我可能建议使用Goto而不是Call自始至终。(如果您愿意,也可以Goto :EOF在不定义标签的情况下使用。)

(或者,学习 PowerShell 并使用它的功能来更干净地实现它;-))

于 2012-07-25T13:42:51.183 回答
1

你是不是忘了在 :ConnectHome 部分之后停止执行?我不确定,但我认为这批只是在那之后继续,打印“地下室”。

编辑:杰罗恩打败了我:)

于 2012-07-25T13:39:51.307 回答
1

去 :ConnectHome 后,它只是去 :ConnectBasement。goto :eof在下面添加@echo Home %LOCAL_IP%

于 2012-07-25T13:38:29.373 回答