質問 |
||
| 質問者: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 |
|
| この回答へのお礼 | ありがとうございました。求める結果が得られました!! |