![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
Windows XP SP3 + Visual Studio 2008 で開発をしています。
(言語に依存しない内容の質問なので、こちらにさせていただきました。)
エクスプローラのコンテキストメニューの新規作成と同等の機能を実装しようとしています。
レジストリから、拡張子ごとに ShellNew キーを取得し、ShellNew キーにある「値」を取得するところまでは問題なくできています。
・この「値」の名称には NullFile、FileName、Data、Command の 4種類がある。
・Command の場合はその文字列値を ShellExecute() などで実行すればよい。
・Command の文字列値中の "%1" は新規作成しようとしているファイル名で置き換えてやればよい。
というところまではわかっているのですが ( Command 以外の種類の内容もわかっていますが、説明は割愛します。)、Command の文字列値中に、"%1" とは別にもう一つ "%2!d!" なるパラメータを持つもの ( ブリーフケース ) があり、これが何なのかがわからなくて困っています。
この "%2!d!" は何のパラメータなのでしょうか。
( もしかすると、"%2" だけ何かに置き換えてやり、"!d!" はそのまま渡せばよいのかもわかりませんが )
ご存知の方いらっしゃいましたらよろしくお願いします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
はっきり言って全然自信はありませんが・・・。
"!d!"は、『遅延環境変数』"d"の参照ではないかと・・・。
("%1"がファイル名に置き換わるように、"!d!"も何か("!d!"無しだと、ブリーフケースが"C:\Documents and Settings\(user)\デスクトップ"フォルダに作られてしまうので、多分、ドライブ名+ディレクトリ名)に置き換わるのかもしれませんが、はっきりとは分かりません。)
プログラムに実装するとなると「分かりません」では済まないでしょうから、実際に、"!d!"をカレントフォルダのドライブ名+ディレクトリ名に置き換えて実験してみるしかないかと思います。
『遅延環境変数』の参照というのは、コマンド実行直前の環境変数の値を参照するものです。通常、環境変数の参照は"%環境変数名%"の形式で行いますが、試しに、『コマンドプロンプト』上で、
:start
@echo off
set FileName=
for /f "delims=" %%i in ('dir c:\*.txt /b /s') do (set FileName=%%i) && (echo %FileName%)
:end
をバッチファイルとして実行してみてください。"do"以下で環境変数FileNameにファイル名をセットしていますから、"echo %FileName%"でそれが表示されそうですが、実際には、C:ドライブ内のテキストファイルの数だけ、
ECHO は <OFF> です。
が表示されるだけです。一方、"echo %FileName%"を"echo !FileName!"に書き替えて実行すると、C:ドライブ内のテキストファイルのフルパス名が延々と表示されます。
この回答への補足
回答ありがとうございます。
さらに、遅延環境変数について詳しいご説明ありがとうございます。
私は遅延環境変数については全く知りませんでしたので、とても参考になります。
ところで、試してみてわかったことがありますので報告させていただきます。(質問する前に気がつくべきでした。)
レジストリに登録されていない拡張子を新たにレジストリに登録し、その拡張子の ShellNew に対して、「コマンドライン引数をそのままファイルに書き出すプログラム(自作)」を登録して、実際にどのように変換されているのか試してみました。
(1) まず、ブリーフケース同様
"%2!d! %1"
というパラメータを設定したところ、コマンドライン引数は
656194 D:\Path\新規XXXX.YYY
のようになっていました。
%2!d! → 656194
%1 → D:\Path\新規XXXX.YYY
に変換されたようです。
この "656194" という数値は、続けて実行すると同じ値なのですが、PC を再起動して再び実行してみると別の値になっていました。
(2) "%2!d" の "%2" を取り除き、
"!d! %1"
としたところ、コマンドライン引数は
!d! D:\Path\新規XXXX.YYY
のようになっていました。
!d! のみだと変換されませんでした。
(3) "%2!d!" の "!d!" を取り除き、
"%2 %1"
としたところ、コマンドライン引数は
D:\Path\新規XXXX.YYY
のようになっていました。
"%2" のみだと "" になってしまうようです。
以上のことから、"%2!d!" で一つのセットとなっていて、何かの数値に置き換わるということは推測できるのですが、この数値がどういうロジックで決定されるのかは、まるで見当がつきません・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- 画像編集・動画編集・音楽編集 inkscapeで作成した図の保存の仕方とその保存したファイルの編集の仕方 1 2022/09/22 09:33
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- UNIX・Linux 実行の仕方及び実行結果が分かりません。 2 2022/11/17 19:31
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- Windows 10 デスクトップにファイルを保存すると既存のファイルアイコンの列に割り込むように保存されて困ってます 2 2022/04/25 19:00
- フリーソフト フォルダ、ファイル名の一括変換について 3 2023/03/16 09:23
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- HTML・CSS リンクバナーのHTMLタグ。画像を変えたり、設置位置を変えるとバナー貼付け側はどう見える? 2 2023/02/01 12:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチでテキストファイルから...
-
バッチファイルで昨日の日付を取得
-
コマンドプロンプト標準出力と...
-
コマンドプロンプト(バッチファ...
-
コマンドプロンプトで2ヶ月前3...
-
コマンドプロンプト画面の閉じ...
-
VBアプリケーションで終了コー...
-
コマンドプロンプト(バッチ)...
-
呼び出し元バッチを知るには?
-
Kシェルでgotoのような処理を作...
-
DOSのバッチで、テキストファイ...
-
バッチファイル 複数条件判定方法
-
DOSのバッチで、変数中のファイ...
-
子バッチ内のキー入力処理へ自...
-
batの変数を直接vbsのプログラ...
-
バッチファイル(for文)がうま...
-
コンテキストメニューの新規作...
-
コマンドプロンプトの「%1」と...
-
大量のフォルダからひとつのフ...
-
コマンドプロンプトのエラーに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチでテキストファイルから...
-
コマンドプロンプト標準出力と...
-
バッチファイルで昨日の日付を取得
-
コマンドプロンプト(バッチファ...
-
コマンドプロンプトで2ヶ月前3...
-
コマンドプロンプト画面の閉じ...
-
絶対パス名からファイル名を取...
-
呼び出し元バッチを知るには?
-
VBアプリケーションで終了コー...
-
コマンドプロンプト(バッチ)...
-
バッチファイルでDirで取得した...
-
echoとsystem関数について
-
バッチファイルで常に最新の現...
-
子バッチ内のキー入力処理へ自...
-
IPアドレスの第3オクテットだ...
-
DOSのバッチで、変数中のファイ...
-
バッチファイル テキストファイ...
-
DOSのバッチで、テキストファイ...
-
C#でメジャーなバッチフレーム...
-
batの変数を直接vbsのプログラ...
おすすめ情報