ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

質問者:indigo45kk コマンドプロンプト 半角スペースを含んだ文字列の抽出
困り度:
  • すぐに回答を!
●ほしい文字列:
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 としても同じ結果です。
どのようなコマンドが適当なのでしょうか?宜しくお願いいたします。
質問投稿日時:08/03/25 20:27
質問番号:3894235
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

良回答10pt

回答者:notnot 解は示されていますが、解説すると、
複数のフィールドをまとめてひとつの変数にセットするには * を使うしかないです。* は、「残りをまとめて」という機能です。

tokens=3* は、tokens=3,* とまったく同じで、「3項目を最初の変数に、残りを二番目の変数に」です。
したがって、「3項目以降をまとめて」がしたければ、
tokens=2,* として、「2項目を最初の変数に、残り(3項目以降)を二番目の変数に」として、二番目の変数を参照します。

ちなみに、tokens=* だと、先頭の空白を除いた行全体が取れます。

tokens=3,* と書けばわかりやすいですが、これがtokens=3*と書いてもいいあたりがある意味「罠」ですね。
種類:アドバイス
どんな人:経験者
自信:自信あり
回答日時:08/03/26 13:50
回答番号:No.3
この回答へのお礼なるほどですね。ありがとうございました!!

回答

 

回答者:Tacosan あ〜, tokens= の仕様を「ひっかけ」って書いたけど, for のヘルプにはちゃんと書いてあるわ....
ちなみに
for /f "skip=2 tokens=3*" %A in ('reg query %REGNAME% /v Dir') do echo %A %B
でも動作するはずです.
種類:回答
どんな人:一般人
自信:参考意見
回答日時:08/03/26 01:02
回答番号:No.2
この回答へのお礼ヘルプですか。一応分からないながらに見てみたのですが。。。

回答

良回答20pt

回答者:Tacosan この仕様は確かにひっかけだと思うな....
for /f "skip=2 tokens=2*" %A in ('reg query %REGNAME% /v Dir') do echo %B
で期待通りの結果になるはず.
種類:回答
どんな人:一般人
自信:参考意見
回答日時:08/03/25 22:25
回答番号:No.1
この回答へのお礼ありがとうございました。求める結果が得られました!!
 
最新から表示回答順に表示良回答のみ表示