• ベストアンサー

コマンドプロンプト 半角スペースを含んだ文字列の抽出

●ほしい文字列: C:\Program Files\aaa bbb ccc\aa bb ●reg quaryの結果: ! REG.EXE VERSION 3.0 HKEY_LOCAL_MACHINE\SOFTWARE\aaaRegister Dir REG_SZ C:\Program Files\aaa bbb ccc\aa bb ●試したコマンド: for /f "skip=2 tokens=3*" %A in ('reg query %REGNAME% /v Dir') do echo %A ●結果:C:\Program token=3-6 としても同じ結果です。 どのようなコマンドが適当なのでしょうか?宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

この仕様は確かにひっかけだと思うな.... for /f "skip=2 tokens=2*" %A in ('reg query %REGNAME% /v Dir') do echo %B で期待通りの結果になるはず.

indigo45kk
質問者

お礼

ありがとうございました。求める結果が得られました!!

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4900/10357)
回答No.3

解は示されていますが、解説すると、 複数のフィールドをまとめてひとつの変数にセットするには * を使うしかないです。* は、「残りをまとめて」という機能です。 tokens=3* は、tokens=3,* とまったく同じで、「3項目を最初の変数に、残りを二番目の変数に」です。 したがって、「3項目以降をまとめて」がしたければ、 tokens=2,* として、「2項目を最初の変数に、残り(3項目以降)を二番目の変数に」として、二番目の変数を参照します。 ちなみに、tokens=* だと、先頭の空白を除いた行全体が取れます。 tokens=3,* と書けばわかりやすいですが、これがtokens=3*と書いてもいいあたりがある意味「罠」ですね。

indigo45kk
質問者

お礼

なるほどですね。ありがとうございました!!

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

あ~, tokens= の仕様を「ひっかけ」って書いたけど, for のヘルプにはちゃんと書いてあるわ.... ちなみに for /f "skip=2 tokens=3*" %A in ('reg query %REGNAME% /v Dir') do echo %A %B でも動作するはずです.

indigo45kk
質問者

お礼

ヘルプですか。一応分からないながらに見てみたのですが。。。

関連するQ&A

専門家に質問してみよう