Ping多台计算机IF语句

时间:2014-05-20 13:50:30

标签: batch-file if-statement command ping

我试图创建一个小批量文件来检查从文本文件中读取的多台PC。对于它找到的任何PC都是可ping的,它会在"结果"中写入一行。文字文件这么说。这就是我所拥有的:

@Echo off
set file=C:\logs\registercheck.txt
date /t >%file%
FOR /F %%I IN (C:\work\regnames.txt) DO (ping /n 1 %%I | ping /n 1 %%I | IF errorlevel 1 goto :nextreg | echo %%I is still on and has not been powered off! >>%file% | :nextreg)
PAUSE  

所以...当我运行文件时,我得到多行"此时goto是意外的"并且我输出文本文件中唯一写的是日期。我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:2)

@Echo off
    setlocal enableextensions disabledelayedexpansion

    set "logFile=C:\logs\registercheck.txt"
    set "inputFile=C:\work\regnames.txt"

    >>"%logFile%" date /t

    for /f "usebackq delims=" %%i in ("%inputFile%") do (
        ping -n 1 %%i >nul 2>nul 
        if not errorlevel 1 (
            >>"%logFile%" echo(%%i is still on and has not been powered off! 
        )
    )

您有两个错误。

第一个是将所有命令放在一行中,分隔符不是竖线字符(|),而是&符号(&

第二个是在do命令的for代码块内,如果执行了一个gotofor命令就完成了,与标签的位置无关被放置。 for代码块中的标签通常会产生错误(取决于其位置)。

如果不是前面的代码,你想要一个单行循环,它可以写成

for /f "usebackq delims=" %%i in ("%inputFile%") do ( ping -n 1 %%i >nul 2>nul & if not errorlevel 1 >>"%logFile%" echo(%%i is still on and has not been powered off! )

for /f "usebackq delims=" %%i in ("%inputFile%") do ( ping -n 1 %%i >nul 2>nul && >>"%logFile%" echo(%%i is still on and has not been powered off! )

使用&&构造。它旨在作为if not errorlevel 1 ...的快捷方式。如果&&左侧的命令没有引发错误级别,则执行右侧的命令。

这是批量sintax。现在ping。 ping命令的行为方式有所不同,具体取决于ip版本。 ping ipv4地址比ping ipv6地址不一样。如果需要,你可以从here抓取一个子线来处理差异。