【问题标题】:Weird Batch File Issue奇怪的批处理文件问题
【发布时间】:2012-07-23 23:00:36
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      编辑:Jeroen 打败了我 :)

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2011-07-17
          • 1970-01-01
          • 1970-01-01
          • 2015-01-27
          • 2017-07-19
          • 1970-01-01
          • 2011-03-23
          • 2018-08-27
          相关资源
          最近更新 更多