Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理文件错误:";此时无法按语法进行处理”;_Batch File_Syntax Error_Crash Reports - Fatal编程技术网

Batch file 批处理文件错误:";此时无法按语法进行处理”;

Batch file 批处理文件错误:";此时无法按语法进行处理”;,batch-file,syntax-error,crash-reports,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 e

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

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

这是一个高级版本,包含两个代码块,它们的执行取决于连接是否正常或丢失

@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
的“常规方法”(相同的逻辑,以上只是一种较短的方法):

我将
设置ipaddr…
从循环中取出。不需要一次又一次地做

(只是想知道,如果连接丢失,谷歌是否可以访问…)

编辑以反映所选内容。稍微增强了一点,因此只有在连接状态更改时才会执行任何操作。如果不需要,请删除“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

如果,请卸下
<代码>&&
正在为您执行此操作。它的工作原理是“如果上一个命令(
find
)成功,那么”我现在注意到它每次打开浏览器时都会抛出“else”。我的目标是,当它失去连接时,只打开浏览器一次,然后继续检查。如果重新连接,它会再次关闭浏览器,一切从头开始。你知道我是怎么做到的吗?(注:我知道^^^谷歌只是一个例子,最终版本中打开的网站不需要am互联网连接)请参见我的编辑。如果连接丢失,它会打开站点,如果用户关闭了它,并且连接仍然关闭,它会再次打开站点。我明白了。因此,如果您使用无法访问的IP尝试该程序,那么它将按其应该的方式打开浏览器。但是它又回到了脚本的开头,其效果是,脚本一直打开google标签,因为它每次都会抛出“else”。我的想法是,它只打开浏览器一次,而不是多次,然后不断检查连接,并关闭浏览器,如果可以再次访问IP。
@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