質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Q&A

解決済

1回答

3098閲覧

window batのfor文でdelimsに"を指定したい。

tennk

総合スコア8

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

0グッド

0クリップ

投稿2020/12/27 04:50

ネットワークアダプタにIPアドレスを設定する際にアダプターの選択肢を与えたい。

windowsでbatを使ってネットアークアダプター(以下、IF)に手動でIPアドレスを割り当てたいと考えており
その際、ユーザーにはどのIFにアドレスを割り当てたいか選択肢を与え、標準入力で選択させたいです。

まずはIFの一覧を出力させるため下記コマンドの出力結果をファイルへ保存させるようにしています。
[コマンド]
netsh interface ipv4 show config //このコマンドでIF一覧を取得
findstr /R ".*" 1> nwifs.txt //↑で取得した結果に対し"間に任意の文字列を含む行のみ取得し.txtへ出力

※実際のbatには上2行を|で渡して1行表記にしています。

[コマンド解説]

netsh interface ipv4 show config で出力される値は

インターフェイスの構成 "Loopback Pseudo-Interface 1"
DHCP 有効: いいえ
IP アドレス: 127.0.0.1
サブネット プレフィックス: 127.0.0.0/8 (マスク 255.0.0.0)
インターフェイス メトリック: 75
静的に構成された DNS サーバー: なし
次のサフィックスで登録します: プライマリのみ
静的に構成された WINS サーバー: なし

なので、""で囲まれた行を findstr /R ".*" 1> nwifs.txt で標準出力を行っています。
するとnwifs.txtは以下のような内容になります。
[nwifs.txt]
インターフェイスの構成 "Loopback Pseudo-Interface 1"
インターフェイスの構成 "イーサネット"
インターフェイスの構成 "イーサネット 2"

この出力結果をもとに
for /f "tokens=2 delims="" %%i in (nwifs.txt) do (
echo %%i
)

で"をデリミタとして2番目の区切り(イーサネット 2など)を変数に格納すればIF名を切り取れると考えたのですが
下記エラーが出力されて正常に動作しません。(echo %%iは.txtから値を引っ張てこれてるかの確認用です。)

現状、正常に動作確認できているのは
netsh interface ipv4 show config | findstr /R ".*" > nwifs.txt
の部分だけです。

delims=に"を指定する方法、またはコマンドでIF名のみを一覧で出力できる方法を
ご存じの方いらっしゃいましたらお力添えいただきたいです。
なるべく多くの人が利用できるようにpythonなど環境構築の必要性がないように作成したいと考えております。

文章があまり得意ではないことやbatは普段書かないので
初心者質問であったり読みづらい部分もあるかと存じますが
よろしくお願い致します。

発生している問題・エラーメッセージ

>netsh interface ipv4 show config | findstr /R \".*\" 1> nwifs.txt コマンドの構文が誤っています。 >for /f "tokens=2 delims="" %i in (nwifs.txt) do (

該当のソースコード

windows

1netsh interface ipv4 show config | findstr /R \".*\" > nwifs.txt 2 3for /f "tokens=2 delims="" %%i in (nwifs.txt) do ( 4 echo %%i 5)

試したこと

delims="" を
delims=^""
delims=""
というようにメタキャラクタを無視させ文字列扱いするようにしましたがそれでも出力はされませんでした。

補足情報(FW/ツールのバージョンなど)

windows10
windows bat

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

引用符で囲まないでオプションを書きます。
CMDの特殊文字は^でクォート。

CMD

1for /f tokens^=2^ delims^=^" %%A in (nwifs.txt) do echo %%A

投稿2020/12/27 05:19

otn

総合スコア84531

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tennk

2020/12/27 05:37

ご回答いただきありがとうございます。 無事、IF名のみを抽出することに成功しました! この方法でも書けるのですね。 調べたページでは"で括っていたのでそのまま引用していました。 大変勉強になりました、ありがとうございます!
otn

2020/12/27 06:52

引用符で囲まない方法はウェブサイトでは自分の書いた物以外では見たこと無いですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問