【问题标题】:Pinging Multiple Computers IF Statementping 多台计算机 IF 语句
【发布时间】:2014-05-20 13:50:30
【问题描述】:

我正在尝试创建一个小批处理文件来检查从文本文件中读取的多台 PC。对于它发现的任何可 ping 的 PC,它会在“结果”文本文件中写入一行这样说。这是我得到的:

@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 出乎意料”,并且在我的输出文本文件中写入的唯一内容是日期。我做错了什么?

谢谢!

【问题讨论】:

    标签: batch-file if-statement command ping


    【解决方案1】:
    @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! 
            )
        )
    

    你有两个错误。

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

    第二个是在for命令的do代码块内,如果执行了一个goto,则for命令完成,与标签放置位置无关。 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 ... 的快捷方式。如果&& 左侧的命令没有引发错误级别,则执行右侧的命令。

    这用于批处理语法。现在平。 ping 命令的行为方式因 ip 版本而异。 ping ipv4 地址与 ping ipv6 地址是不一样的。如果需要,您可以从 here 获取一个子程序来处理差异。

    【讨论】:

      猜你喜欢
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      • 2010-12-15
      相关资源
      最近更新 更多