web-dev-qa-db-ja.com

コマンドライン出力を変数に抽出する方法は?

私が顧客のために取り組んでいるタスクの一部として、エンタープライズログオンスクリプトにいくつかの変更を加える必要があります。 Windowsコマンドラインは間違いなく私の専門分野ではありませんが、ほとんどの場合は問題ありません。しかし、どうしたらいいかわからないという問題が1つあります。

基本的に、マシンのデフォルトゲートウェイのIPアドレスを環境変数に取得する必要があります(後でスクリプトで使用するため)。 ipconfigtracertの両方の出力に存在することを知っており、必要な出力の正確な行を見つける方法を知っていますが、それを超える方法がわかりません。それ。

たとえば、次のコマンドは次のような出力を生成します。

>ipconfig|Find "Default Gateway"|Findstr/N "."|Findstr/B "1:"

 1:   Default Gateway . . . . . . . . . : 199.99.9.1

しかし今、私はどういうわけかこのテキスト行からIPアドレスだけを抽出し、それを環境変数に割り当てる必要があります。では、どうすればWindowsコマンドラインからそれを行うことができますか? (Windows XP以上)。

3
RBarryYoung

_for /f_はあなたの友達です。

_for /f "usebackq tokens=1,2,3 delims=:" %A in (`ipconfig ^| Find "Default Gateway" ^| Findstr/N "." ^| Findstr/B "1:"`) do @if not defined MYVAR set MYVAR=%~C
_

...トリックを行うかもしれません。

編集:コードブロックを変更して、3番目の値を2番目の値ではなく、パイプをエスケープする必要がありました。

あなたcouldも短縮して:

_for /f "usebackq tokens=1,2,3 delims=:" %A in (`ipconfig ^| Find "Default Gateway" ^| Findstr/N "."`) do @if not defined MYVAR set MYVAR=%~C
_

... as、technically、2番目のfindstr(最初の結果に制限する)は実際には_if not defined_

5
jimbobmcgee