プロが教えるわが家の防犯対策術!

バッチファイルを使ってレジストリの操作を行いたいと考えています。


質問1


reg add ^
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.v ^
/ve /d "hidemaru.v" /t REG_SZ /f

reg add ^
"HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.v" /ve /d "hidemaru.v" /t REG_SZ /f



という二つのコードはエラーなく実行できるのに



reg add ^
"HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.v" ^
/ve /d "hidemaru.v" /t REG_SZ /f

というようにキー名をダブルクオーテーションマークで囲んだ上で
ハットマークで改行を入れるとエラーとなってしまいます。
キー名にスペースを含む場合には、ダブルクオーテーションマークが必要ですし、
一行に全てコードを書くと見づらいので
この二つを使いたいのですが
どのようにすれば良いですか?


質問2


subルーチンを使ってコードを書きたいのですが



call :func v

pause
exit


:func

reg add ^
HKEY_LOCAL_MACHINE\SOFTWARE\Hidemaruo\Hidemaru\Capabilities\FileAssociations ^
/v ".%1" /d "hidemaru.%1%" /t REG_SZ /f



これだとうまくいくのですが

:func

reg add ^
HKEY_LOCAL_MACHINE\SOFTWARE\Hidemaruo\Hidemaru\Capabilities\FileAssociations ^
/v ".%1%" /d "hidemaru.%1%" /t REG_SZ /f


のように、/vの引数のところで
%1%ではなく%1を使わないとうまく変数を読み取れないようです。

/dの引数のところは%1でも%1%でもうまくいくのに
この違いは一体なぜですか?

質問者からの補足コメント

  • ありがとうございます。

    試してみたのですが

    質問1...


    2行目以降の全行頭ではなく、
    2行目だけの行頭に空白を入れればいけましたけど。


    reg add ^
    "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.v" ^
    /ve /d "hidemaru.v" /t REG_SZ /f

    reg add ^
    "HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.xfm" ^
    /ve /d "hidemaru.xfm" /t REG_SZ /f


    のような感じです。

    これで問題ないですよね?

    質問2...

    もしかして変数を取り出したい場合には
    %USERDOMAIN%

    のようにパーセントで囲むのが正しいけれど
    subルーチンの引数の場合には
    前に一つだけパーセントを置く
    %1
    という書き方が正しいということですか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/07/30 17:21

A 回答 (1件)

質問1...


2行目以降の全行頭に1つ以上の空白を入れる。

質問2...
>%1%ではなく%1を使わないとうまく変数を読み取れないようです。
そのように作られているからでしょう。

>/dの引数のところは%1でも%1%でもうまくいくのに
%1%は正しくないが、うまくいかないとは限らない。
この回答への補足あり
    • good
    • 0

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