blochの日記

自虐ネタ以外のぐちは書かないようにしましょう

for /f でコマンド出力を取り込む

コマンドの標準出力を取り出すやり方。
一昔前なら、パイプ(つまり、MS-DOSなら中間ファイル)経由でやるのがあたりまえだと思っていたけれど、ちょっと前に今風のやり方がわかった。

例)multiplier A B で標準出力に積ABを出力されるとする。
以下のバッチコマンドに、引数%1=秒数 が与えられると、
for /f %%t in ('multiplier %1 1000') do set tmsec=%%t
環境変数 tmsec には、ミリ秒 がセットされる。

例)コマンドラインからの実行例としては、LANについて、
for /f %i in (arp -a) do nbtstat -A %i
で、LAN上機器のIPアドレスと、名前の対応を調べられる。
(但し、arpが、最初に吐いてくる、IP以外の出力メッセージがちょっと煩わしい)

C>@for /f %i in ('arp -a -N 1xx.1x.6z.7a') do @nbtstat -A %i | find /V "ホストが" |find /V "0.0.0.0" |find/V "エリア接続"|find/V "ネットワーク接続" |find /V "正しく"|find/V "インター"|find/V "ください" |find /V "169."|findstr "."

でだいぶ、ましになる。1xx.1x.6z.7aは、PCのLANアドレス。これを指定しないと、Bluetoothやら仮想IPやら、ローカルのアドレスがわんさか出てくる。

【メモ】nbtstat -A 〔ipアドレス〕だけでは名前が表示されるだけ。これのあとで、nbtstat -c でキャッシュを表示させると、やっと、名前とIPの対応関係が見える。さらに、最初に管理者モードでnbtstat -Rと、キャッシュをクリヤしておいた方が良い。やれやれ。