1

type以下のバッチ ファイルのfor /fループで、2 番目のトークン (*) の最初の文字がWindows XP(のみ)表示されない理由について何か考えはありますか?

注:出力の代わりに a を入れるだけでset "test=%%a"問題を解決することですか? 私の答えへのこのコメントjebによって実現されたようにping<CR><CR><LF>Windows XP

4

2 に答える 2

1

面白い。なしで出力されるものに基づいて@echo off、変数が評価される時期の違いのようです(「外側の」シェルまたは「内側の」シェルの一部として)。

ただし、次のようにパラメーターを関数に渡すと、XP と Win7 の両方で正常に動作するように見えます。

@echo off
    goto :main

:xyzzy
    if "x%1"=="x""" goto :eof
    echo %1
    echo %2
    echo.
    goto :eof

:main
    echo.&echo.
    ping -n 1 google.com
    echo.&echo.
    for /f "tokens=1*" %%a in ('ping -n 1 google.com') do call :xyzzy "%%a" "%%b"
    echo.&echo.

xyzzy関数内の空白行も値を追加しないように見えるため、削除したことに気付くでしょう。本当に出力したい場合は、その関数の最初の行を削除してください。元のスクリプトとは異なり、そのスクリプトの出力には最初の文字が保持されています。

Pinging google.com [74.125.225.105] with 32 bytes of data:

Reply from 74.125.225.105: bytes=32 time=253ms TTL=43

Ping statistics for 74.125.225.105:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 253ms, Maximum = 253ms, Average = 253ms


"Pinging"
"google.com [74.125.225.105] with 32 bytes of data:"

"Reply"
"from 74.125.225.105: bytes=32 time=267ms TTL=43"

"Ping"
"statistics for 74.125.225.105:"

"Packets:"
"Sent = 1, Received = 1, Lost = 0 (0 loss),"

"Approximate"
"round trip times in milli-seconds:"

"Minimum"
"= 267ms, Maximum = 267ms, Average = 267ms"
于 2013-02-04T08:01:28.830 に答える