- 締切済み
バッチファイルから関連付けを設定
以下はサンプルですが・・ assoc .ext=example.ext ftype example.ext="c:\program.exe" "%%1" このようにしても、バッチファイルから関連付けが設定できません。 上記を普通にコマンドラインに入力すると(%%を%に置き換えて) きちんと実行できるのですが、 どのようにしたらよいでしょうか?
- みんなの回答 (8)
- 専門家の回答
みんなの回答
- Uncle_John
- ベストアンサー率57% (454/790)
失礼な表現、記載、誤記等ありましたらご容赦ください。 小生PCもあるテキストファイルに架空の拡張子を付けてある時はメモ帳で、ある時は読めないようにしていました。 はっきり言って、パスワード代わりにしてバッチファイルを動かすかどうか決めるものです。 そのファイルをクリックで見れてしまうのは困るので前述のような細工をしていました。 結局、前回お伝えしたような理由で関連付けができないようになりました。 小生の関連付けは架空のWindowsで使用されていない拡張子だったのでその拡張子データを思い切ってレジストリから削除しました。 そうしたところ、PCは元に戻りました。 管理者権限コマンドプロンプトから2行のバッチファイルを起動し、県連漬けあるいはそれをキャンセルするものです。 要するにWindows上で割り当てられたり、あるいは特定の操作でバッチファイルから関連付けられなくなるようです。 レジストリをいじるのは危険なのでお勧めしませんがご一考ください。
- Uncle_John
- ベストアンサー率57% (454/790)
取り急ぎ連絡します。 返信を受けて前半部分をバッチにして実行してみました。 うまくいかないどころか、小生のPCでもバッチファイルで関連付けができなくなりました。 とはいっても、実害はないですが… シンプルに、二行にしてバッチファイルが動くか確認してください。 %1など変数的な使い方もやめてシンプルにです。 その状態で動くようになれば解決すつのでは? コマンドプロンプトとOSの関連付けか? もしくは、最初の部分のコーディングが悪さしているか? コマンドプロンプトの問題ではなく設定的な問題のような気がします。 原因が解ったら教えてください。 小生の方でも時間があたら調べてみます。 PS、今から2~3日、私用で返信できません。 あしからず
お礼
ありがとうございます。 お返事遅くなり申し訳ありません。 %1とか使わずに、たった2行であっても、バッチファイルですと 関連付けができません。 同じものを、コマンドプロンプトでタイピをすると、関連付けされます。
- Uncle_John
- ベストアンサー率57% (454/790)
失礼な表現、記載、誤記等ありましたらご容赦ください。 前回の補足です。 バッチファイルは正確には分かりませんが原則一行ずつ処理されます。 その加減もあって、Windows8では確かめていませんがXpではgotoで前に戻す処理ができなかったはずです。 要するにインタプリタ系のプログラムで一行読んで機械語変換し処理が済んだら次の一行と言った感じです。 コンパイラ系であればそして、終わりがあればcallしても問題がないかもしれないのですが現状では開いているバッチファイルをもう一度開こうとしてしまい理論的に合わない気がします。 以上 参考まで
- Uncle_John
- ベストアンサー率57% (454/790)
失礼な表現、記載、誤記等ありましたらご容赦ください。 >extention.batで保存してください。 自分自身で自分自身を「call」している様ですが許されないのでは? CALLのバッチと本体の名前は変えるべきでは?
お礼
ありがとうございます。 これが、かなり最低限にして、call にしなくても動作しません。 (厳密には正常動作のように見えて、何も仕事をしていない) 前にも言いましたが・・・ バッチファイルでなく、手打ちであれば、しっかりと 拡張子が関連付けされます。
- Uncle_John
- ベストアンサー率57% (454/790)
失礼な表現、記載、誤記等ありましたらご容赦ください。 小生のPCでもプログラムが違いますが管理者で実行すれば「assoc」「ftype」は実行出来、有効になります。 提示いただいたコマンドプロンプトのハードコピーですが表示のあるところだけを行として呼ぶとすると 全体のコーディングが不明で分からないところがあります。 5行目のif文は小生には理解できません。 6行目と7行目は実行していると思います。 8行目「.ocp=kmbfile.opx」は7行目の実行結果 10、11行目の実行結果が12行目「kbmfil.opx=y:\program\…」でこれも実行されていると思います。 この8と12行目は管理者でない形で実行すればエラーになると思います。 pauseは何処に入れたのでしょうか?通常は一時停止すると思います。
お礼
ありがとうございます。 管理者で実行して、このようになってしまいます。 pauseについては、もともとバッチファイルではなく コマンドプロンプト自体を管理者で実行しているので これは扶養とみなして、そのままバッチファイルの終了結果に なっています。 extention.batで保存してください。 ----- if "%1" == "" goto all assoc .%1= assoc .%1=kbmfile.%1 rem assoc kbmfile.%1= ftype kbmfile.%1=y:\program\common\kbmed\kbmplay.exe %1 rem ftype kbmfile.%1= rem pause をいれるなら、ここ goto exit :all call extention.bat mid call extention.bat rmi call extention.bat rcp call extention.bat g36 call extention.bat r36 call extention.bat mds call extention.bat mp3 call extention.bat mp2 call extention.bat mp1 call extention.bat wmp call extention.bat wav rem call extention.bat ra rem call extention.bat rm rem call extention.bat rmj rem call extention.bat lqt call extention.bat qt call extention.bat mov call extention.bat wmv call extention.bat asf call extention.bat wma call extention.bat mp4 call extention.bat avi pause call extention.bat mpg call extention.bat mpe call extention.bat mpeg call extention.bat m1v rem call extention.bat opi rem call extention.bat ovi rem call extention.bat ozi rem call extention.bat m rem call extention.bat m2 rem call extention.bat mz rem call extention.bat mp rem call extention.bat ms rem call extention.bat fp rem call extention.bat fpd call extention.bat mod rem call extention.bat s3m rem call extention.bat xm rem call extention.bat it rem call extention.bat mdl rem call extention.bat 669 rem call extention.bat amf rem call extention.bat ams rem call extention.bat dbm rem call extention.bat dsm rem call extention.bat far rem call extention.bat j2b rem call extention.bat med rem call extention.bat mt2 rem call extention.bat mtm rem call extention.bat okt rem call extention.bat psm rem call extention.bat ptm rem call extention.bat ult rem call extention.bat umx rem call extention.bat um call extention.bat swf rem call extention.bat viv rem call extention.bat sgt rem call extention.bat sgp rem call extention.bat mus rem call extention.bat ape call extention.bat flac rem call extention.bat wv rem call extention.bat tta rem call extention.bat ofr rem call extention.bat mp+ rem call extention.bat mpc rem call extention.bat mpo rem call extention.bat tss rem call extention.bat qcp rem call extention.bat mld rem call extention.bat pmd rem call extention.bat str call extention.bat wav call extention.bat aif call extention.bat aiff call extention.bat aifc call extention.bat au call extention.bat snd rem -------------- rem call extention.bat spc rem call extention.bat nsf rem call extention.bat nsz rem call extention.bat nez rem call extention.bat nsd rem call extention.bat gbr rem call extention.bat gbs rem call extention.bat hes rem call extention.bat spc call extention.bat bgm call extention.bat mgs call extention.bat mpk call extention.bat bgr call extention.bat opx :exit
- Uncle_John
- ベストアンサー率57% (454/790)
失礼な表現、記載、誤記等ありましたらご容赦ください。 >かつ、何もエラーメッセージが出ません。 バッチファイルだとエラーが出ようと出まいと終了すると思いますが… ご存じだとは思いますがechoやpauseを活用しては? echo on assoc .ext=example.ext pause ftype example.ext="c:\program.exe" "%%1" pause でなんと出ますか? pauseで止まることなくassocやftype で何も表示せず終了するようなら許されないコーディングが含まれています。 エラーが出る内容ならpauseで表示してくれます。
お礼
ありがとうございます。 pause をやっても、実は何も表示がされず、かつ、 関連付けが設定されていない状態になります。 実際のもの(バッチ)がこちらになります。 http://www.daiba.cx/okwave/q8105295/ext.png #定義をクリアしているように見える文がありますが、rem で始まっているので、コメントアウトです。
- kteds
- ベストアンサー率42% (1882/4440)
No.1の補足です。 > やはりうまくいきません;; コマンドラインではうまくいくということですので、 残るはアカウント制御の問題でしょう。 当該バッチファイル 右クリック -> 「管理者として実行」 も試し済みでしょうか。 管理者としてもダメなら、解りません。 --- なお、私の場合はうまくいっています。 なにしろ使うコマンドは assoc と ftype しかありませんので・・・。
お礼
ありがとうございます。 管理者として実行をしても、うまくいきません。。。 また、この自動設定しようとしているのが、ネットワークドライブに あるのも原因でしょうか。 #ローカルドライブにあまり小物的なプログラムを置きたくないので・・・
- kteds
- ベストアンサー率42% (1882/4440)
ftype example.ext=c:\program.exe %1 は試してみましたか。
お礼
ありがとうございます。 一部質問が間違っていました。 %1 はバッチファイルを再帰しているので、必要なパラメータでした。 同様に展開した状態で念のため ftype example.ext=c:\program.exe ext のようにやっても、やはりうまくいきません;; かつ、何もエラーメッセージが出ません。
お礼
ありがとうございます。 結論として解決ができなかったために、このままで締め切りとさせていただきます。