アプリ版:「スタンプのみでお礼する」機能のリリースについて

●ほしい文字列:
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 としても同じ結果です。
どのようなコマンドが適当なのでしょうか?宜しくお願いいたします。

A 回答 (3件)

この仕様は確かにひっかけだと思うな....


for /f "skip=2 tokens=2*" %A in ('reg query %REGNAME% /v Dir') do echo %B
で期待通りの結果になるはず.
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/03/27 19:25

解は示されていますが、解説すると、


複数のフィールドをまとめてひとつの変数にセットするには * を使うしかないです。* は、「残りをまとめて」という機能です。

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

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

tokens=3,* と書けばわかりやすいですが、これがtokens=3*と書いてもいいあたりがある意味「罠」ですね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/03/27 19:25

あ~, tokens= の仕様を「ひっかけ」って書いたけど, for のヘルプにはちゃんと書いてあるわ....


ちなみに
for /f "skip=2 tokens=3*" %A in ('reg query %REGNAME% /v Dir') do echo %A %B
でも動作するはずです.
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/03/27 19:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!