回应变量命令的输出

时间:2014-10-07 13:27:34

标签: windows batch-file

我试图创建一个简单的批处理脚本,它将命令输出存储到tmp文件,将tmp文件的内容存储到变量中,然后输出变量:

@setlocal enableextensions enabledelayedexpansion
@echo off

ping -n 1 10.1.0.2 > tmp

SET @var= < tmp
ECHO %@var%

del tmp

我希望上面的内容能够奏效,但它会让人失望:

C:\Documents and Settings\Administrator\Desktop>pinger.bat
ECHO is off.

(Nb:取@echo off只输出ECHO is on,包括回显所有代码行

1 个答案:

答案 0 :(得分:1)

@rostok指出的question(我的回答here)显示了不使用收到的数据包来确定主机是否在线的原因。在同一个子网上,通过ipv4,使用离线主机,您将获得一个“无法访问”的#34;错误,但收到数据包。

对于ipv4中的简单测试,链接的答案可以解决您的问题。对于针对ipv4或ipv6(显示不同行为)的更强大的测试,this可能有所帮助。

无论如何,直接从ping命令

获取所需数据的代码
set "received="
for /f "skip=6 tokens=5 delims==, " %%a in ('ping -n 1 10.1.0.2') do (
    if not defined received set "received=%%a"
)

或来自文件

set "received="
for /f "usebackq skip=6 tokens=5 delims==, " %%a in ("tmpFile") do (
    if not defined received set "received=%%a"
)

skip子句指示应跳过前六行,tokensdelims选择行内所需的元素

Packets: Send = 1, Received = 1,
        ^    ^^^ ^^        ^^^ ^  Delimiter position
1        2      3  4          5   Token number

但如上所述,这不是解决问题的可靠方法