type
以下のバッチ ファイルのfor /f
ループで、2 番目のトークン (*) の最初の文字がWindows XP
(のみ)表示されない理由について何か考えはありますか?
注:出力の代わりに a を入れるだけでset "test=%%a"
問題を解決することですか? 私の答えへのこのコメントでjebによって実現されたようにping
<CR>
<CR><LF>
Windows XP
type
以下のバッチ ファイルのfor /f
ループで、2 番目のトークン (*) の最初の文字がWindows XP
(のみ)表示されない理由について何か考えはありますか?
注:出力の代わりに a を入れるだけでset "test=%%a"
問題を解決することですか? 私の答えへのこのコメントでjebによって実現されたようにping
<CR>
<CR><LF>
Windows XP
面白い。なしで出力されるものに基づいて@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"