批处理文件错误:"此时无法在语法上处理"

时间:2016-01-07 14:35:51

标签: batch-file syntax-error crash-reports

我的批处理文件程序总是在同一点崩溃。崩溃之前总会发生的事情是:

ping -n 6 127.0.0.1 1>nul: 2>nul:

-n cant be processed syntactically at this point.

if ping -n 1 127.0.0.1|find "(0" >nul && goto Loop

然后窗口关闭。

也许有人帮我解决了这个问题? 这是整个脚本:

@setlocal enableextensions enabledelayedexpansion

:Loop

set ipaddr=127.0.0.1

ping -n 6 %ipaddr% >nul: 2>nul:

if ping -n 1 %ipaddr%|find "(0%" >nul && goto Loop

echo Connection lost

start "" http://www.google.com


else if ping -n 1 %ipaddr%|find "(100%" >nul && goto Loop

echo Connection OK

taskkill /FI "WINDOWTITLE eq google*" goto Loop

endlocal

1 个答案:

答案 0 :(得分:1)

这是一个高级版本,其中包含两个代码块,这些代码块的执行取决于Connection是正常还是丢失。

@setlocal enableextensions enabledelayedexpansion
set ipaddr=127.0.0.1
:Loop
ping -n 6 %ipaddr% >nul: 2>nul:
ping -n 1 %ipaddr%|find "(0%" >nul && (
  echo Connection OK
  taskkill /FI "WINDOWTITLE eq google*" 
) || (
  echo Connection lost
  tasklist /v /fi "Windowtitle eq google*" || start "" http://www.google.com
)
goto :Loop

这是传统方式"使用%errorlevel%和if - else(相同的逻辑,以上只是一种较短的方式):

@setlocal enableextensions enabledelayedexpansion
set ipaddr=127.0.0.1
:Loop
ping -n 6 %ipaddr% >nul: 2>nul:
ping -n 1 %ipaddr%|find "(0%" >nul 
if %errorlevel%==0 (
  echo Connection OK
  taskkill /FI "WINDOWTITLE eq google*" 
) else (
  echo Connection lost
  tasklist /v /fi "Windowtitle eq google*" || start "" http://www.google.com
)
goto :Loop

我把set ipaddr...带出了循环。不需要一次又一次地这样做。

(只是想知道,如果Google可以访问,如果Connection丢失了......)

编辑以反映last comment。有点增强,因此只有连接状态发生变化时才会发生任何操作。删除" log"如果你不需要它,或者如果你愿意,可以将它们重定向到文件。

@echo off
setlocal enabledelayedexpansion
set ipaddr=127.0.0.1
set "status=undefined"

:Loop
ping -n 2 %ipaddr% >nul: 2>nul:
ping -n 1 %ipaddr%|find "(0%" >nul && (

  set oldstatus=!status!
  set status=online
  if !status! neq !oldstatus! (
    echo %date% %time% Connection switched from !oldstatus! to !status!
    taskkill /FI "WINDOWTITLE eq google*" >nul 2>&1
  )

) || (

  set oldstatus=!status!
  set status=offline
  if !status! neq !oldstatus! (
    echo %date% %time% Connection switched from !oldstatus! to !status!
    start "" http://www.google.com
  )

)
goto :Loop