【问题标题】:Making a server ping pong tool in batch批量制作服务器乒乓工具
【发布时间】:2013-10-07 08:47:38
【问题描述】:

我目前已经这样做了,但是 for 循环中有一个意外错误。

请帮忙。

@ECHO OFF
COLOR 1F
TITLE (Ash's Script) Server Ping Pong

rem ---------------------------------------------------------------------------------------------------------------

ECHO Started %time% %date% > X:\Scripts\ServerPing.txt

rem ---------------------------------------------------------------------------------------------------------------

FOR /f "tokens=*" %%i in (X:\Scripts\ComputerLists\ServerList.csv) DO (
    PING %%i -n 1 -w 3
    IF ERRORLEVEL 0 (
        ECHO %%i ONLINE %time%>> X:\Scripts\ServerPing.txt 
    ) ELSE ( 
        ECHO %%i OFFLINE %time%>> X:\scripts\ServerPing.txt
    )
)

rem ---------------------------------------------------------------------------------------------------------------

【问题讨论】:

  • 最后的回声正确吗?您以小写形式指定 scripts 目录,但在所有其他情况下,它是大写的
  • @omgmog Windows 不区分大小写
  • 您遇到什么类型的意外错误?真的是一个错误还是只是一个意外的结果?

标签: loops batch-file for-loop


【解决方案1】:

IF ERRORLEVEL 0 始终为真。

改用这个:

if not errorlevel 1

同时将 echo 上的重定向更改为文件:

>>X:\Scripts\ServerPing.txt ECHO %%i ONLINE %time%

这消除了当最后一个字符是(流的)数字时的问题

另一个问题是在循环开始时评估%time% - 在日志中获取动态时间然后启用延迟扩展并使用!time! 而不是%time%

【讨论】:

  • 附加到IF ERRORLEVEL 0 is always true.。这是真的,因为IF ERRORLEVEL <n> 为真,如果 errorlevel 是上面的<n> 。 (这对 foxidrive 来说是显而易见的,但对其他人来说可能并非如此)
  • 只是为了澄清 jeb 的评论:如果返回的错误级别为 50,那么从 0 到 49(和 50)的每个错误级别也将测试为真。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
  • 1970-01-01
  • 2021-04-12
  • 2012-05-29
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多