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

Windows、DOS、レジストリの使い方で教えていただきたいことがあります。

実現したいことは、

1. 「レジストリからコマンドプロンプトのショートカットを実行したい」
2. 「レジストリのデータ内で環境変数を使用したい」

の2点です。

──────
以下のような環境です。

・Windows7 64bit
・管理者権限のユーザでログインし使用しています。
・ファイル名を指定して実行、「cmd」を入力し[OK]で、コマンドプロンプトが起動できます。
・「c:\Windows\System32\cmd.exe」のショートカット(.lnk)を作成し、実行できることも確認できています。

このような環境で、エクスプローラーで「何もないところ」を右クリックした時に.vbs や .bat を実行したいと考え、
HKEY_CLASSES_ROOT\Directory\background\shell\cmd\command 周辺を編集することにしました。
現在、エクスプローラーで「何もないところ」を右クリックした時のコンテキストメニューから、設定したものを表示・実行するところまでは成功しています。

しかし、上述の2点、
1. 「レジストリからコマンドプロンプトのショートカットを実行したい」
2. 「レジストリのデータ内で環境変数を使用したい」
で引っ掛かってしまいます。

──────
[1]
レジストリのデータ内で「cmd /c ~」と設定した場合、「c:\Windows\System32\cmd.exe」を直接実行しているので問題ないのですが、
例えばデータ内で「cmd.exe」のショートカット(.lnk)を指定して実行すると
「[Window Title] Explorer.EXE [Content] は有効な Win32 アプリケーションではありません。」と表示されてしまいます。

[2]
コントロール パネル -> すべてのコントロール パネル項目 -> システム -> システムの詳細設定 -> 環境変数 -> ((user))のユーザー環境変数
こちらの値に、任意のフルパスを設定済です。
これをレジストリのデータ内で「%((設定したフルパス))%」と指定しても
「[Window Title] Explorer.EXE [Content] アプリケーションが見つかりません」と表示されてしまいます。

──────
さまざま検索したのですが、そもそも自分がレジストリの使い方や、権限の理解ができていないのでは、と感じています。
お知恵をお貸しいただければ幸いです。

A 回答 (3件)

コマンドプロンプトに付いては下記を参照


https://tipszone.jp/20110612_cmd/
バッチファイル関係はこちら
http://www.atmarkit.co.jp/ait/articles/1609/07/n …
    • good
    • 0
この回答へのお礼

参考URLありがとうございます。
確認しています。
アイティメディアさんは登録内容の敷居が高いですね(^_^;)

お礼日時:2017/03/25 01:59

検証してみましたが、恐らくWindowsのレジストリの値に、「%」で囲んだ変数は使えない気がします。

その他の記述方法があるかも不明です。

どういった目的で、それを実現したいのかが分かりませんが、違うアプローチの仕方で解決された方が良い気がします。

例えば、任意の場所に、「コマンドプロンプトの起動」というフォルダを作成します。

次に、メモ帳を起動し、
以下の線内の文章をコピー&ペーストし、
「スタート.bat」という名前を付けて上記のフォルダ内に保存し、
メモ帳を閉じます。

――――――――――――――――――――

@echo off

cmd /k "%~dp0メイン.bat"

――――――――――――――――――――

次に、再度メモ帳を起動し、
以下の線内の文章をコピー&ペーストし、
「メイン.bat」という名前を付けて上記のフォルダ内に保存し、
メモ帳を閉じます。

変数名やパスは、ご自身の環境や用途に合わせて書き換えてください。

――――――――――――――――――――

@echo off

rem ■ カレントディレクトリの移動 ■
cd "C:\XXX"

rem ■ パスの追加 ■
path %PATH%;C:\AAA
path %PATH%;C:\BBB

rem ■ 必要な変数の代入 ■
set CCC=C:\CCC
set DDD=C:\DDD

――――――――――――――――――――

次に、「スタート.bat」のショートカットを作成し、
名前を「スタート」に変更し、
起動用のレジストリの値に、
「explorer "C:\~~~\コマンドプロンプトの起動\スタート.lnk"」
という感じで、そこの正しいパスを書き込んでください。

最後に、上記で作成したショートカットファイルを右クリックし、
プロパティをクリックし、
「詳細設定」をクリックし、
「管理者として実行」にチェックを入れ、
「OK」をクリックして画面を閉じてください。
(※管理者として実行する必要が無ければ、この作業は不要です。)

以上です。

「.bat」ファイル(バッチファイル)の編集は、右クリックから「編集」をクリックすると出来ると思います。

上記の方法が、質問者さんの実現したい事と違っていたらすみません。

又、Windows10 32bit環境での確認ですので、そちらの環境でうまく動作しなかったらすみません。
    • good
    • 0

No.2です。



すみません。訂正させてください。

よく考えてみましたら、レジストリには、よく「%SystemRoot%\~」等の記述が使われますので、「%」で囲んだ環境変数は使えますね。失礼しました。

恐らく、今回の件でレジストリに環境変数が使えないのは、当該のレジストリキーの「既定」の値の種類が、「REG_SZ」になっているからかと思います。これを「REG_EXPAND_SZ」にする必要があるかと思います。

レジストリキーを新規に作成しますと、
既定の値は、「REG_SZ」で作成されてしまいますので、
そのレジストリキーを右クリックし、
「新規」をクリックし、
「展開可能な文字列値」をクリックします。

名前は、そのまま「新しい値 #1」等で結構です。

作成した値をダブルクリックし、環境変数を使ったプログラムのパス等を記述します。

当該のレジストリキーを右クリックし、
「エクスポート」をクリックし、
任意の場所に、任意の名前を付けて保存します。

保存されたREGファイルを右クリックし、
「編集」をクリックします。

メモ帳でファイルが開きますので、
「@=」から始まる行を削除し、
「"新しい値 #1"=」の部分を「@=」に書き換え、
上書き保存して閉じます。

保存したREGファイルをダブルクリックして、レジストリを追加します。

これで、当該のレジストリキーの値が、「REG_EXPAND_SZ」となり、環境変数が使えるようになるかと思います。
    • good
    • 0
この回答へのお礼

わかりやすいご説明ありがとうございます。

やりました!

cmd /c %((環境変数で設定したフルパス))%\hoge.vbs %((環境変数で設定したフルパス))%\hoge.bat

これを実行したところ、ひとまず環境変数の利用は確認できました。
2. 「レジストリのデータ内で環境変数を使用したい」
はこれでOKです。助かりました!

ですが一方、
1. 「レジストリからコマンドプロンプトのショートカットを実行したい」
こちらは効かなかったですね。
REG_EXPAND_SZとは関係ないのか、キー自体を考え直すべきなのか。

もう少しいろいろ試行してみます。

お礼日時:2017/03/25 01:55

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