- ベストアンサー
バッチファイルで複数のレジストリを上書き
- バッチファイルで複数のレジストリを上書きする方法を教えてください。
- バッチファイルとレジストリファイルをUSBメモリ内に忍ばせておき、選択した言語に応じて4つのレジストリを上書きする方法を教えてください。
- Windows 7 Enterprise 64bit環境でバッチファイルを使用して、USBメモリ内のレジストリファイルを選択した言語に応じて上書きする方法を教えてください。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
a-yoshiです。続きです。 何か解決の糸口が見つかったかもしれません。 >レジストリキーをダブルクリックすればこの表示が出てきます。 しかし、 バッチファイルとして実行させようとしても >・・・コンポーネントが正常に動作しないことがあります。・・・・続行しますか?」 はどうしても表示されません。 ということは、実際にバッチファイルが存在している場所(USBメモリ?)を正しく指し示していないために実行できなくなっているのだと思います。 可能性があるものを列挙しますので、順次試してみてください。 1.USBメモリのドライブレターが実際のものと異なっている。 2.フォルダ名に途中空白がある場合に付けるダブルクォーテーションマークが正しく付けられていない。 3.実行させるバッチファイルが存在するカレントフォルダが想定と異なっている。 こんなところでしょうか。 では、順次、検討していきましょうか。 1.USBメモリは、Eドライブにいつも割り当てがされていると見てよいのですね。まぁ、実際に操作しているときに確認すれば間違いないはずですね。 とすると、 2.試しに、こんな感じでバッチファイルに書いてみましょうか。 "E:\Addins Language\English\ANALYS32.XLL" または「Language」を削除してしまい、 E:\Addins\English\ANALYS32.XLL とすればダブルクォーテーションは不要になりますね。 3.よく考えれば4つの言語があるので、同一のフォルダ内に格納しようとするとファイル名が重複してしまいますね。 案としてバッチファイル名の先頭に言語の種別を決める1文字を入れておくとよいかもしれません。 例えば、日本語用のでしたら "E:\Addins Language\JANALYS32.XLL" "E:\Addins Language\JATPVBAEN.XLAM" "E:\Addins Language\JLABELPRINT.XLAM" "E:\Addins Language\JSOLVER.XLAM" 同じフォルダに英語用のを入れると、 "E:\Addins Language\EANALYS32.XLL" "E:\Addins Language\EATPVBAEN.XLAM" "E:\Addins Language\ELABELPRINT.XLAM" "E:\Addins Language\ESOLVER.XLAM" という感じにしていけばすべて同じフォルダに格納できます。 まあ、ついでにEドライブ直下に、バッチファイルとこれらレジストリバッチも入れると紛らわしさがなくなり必ず実行してくれますね。 今日は、こんなところで。 あと一息だと思います。ファイト! では
その他の回答 (7)
- a-yoshi
- ベストアンサー率34% (222/645)
a-yoshiです。 だいたいやりたいことがわかってきました。ただ、自分のPCをそちらと同じような多言語状態にすることがなぜかできそうにないので、抜き出したregファイルをうまく適用できるかどうかのところまでお付き合いできるかと思います。 で、 >そうするとHKEY_ROOTの下に4つのキーが出てくるはずです。 →たしかに出てきました。但し HKEY_CLASSES_ROOT\Installer\Components\5B5EF7AEDE9827842B7BD01C302B3B02 とあと、 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Installer\Components\5B5EF7AEDE9827842B7BD01C302B3B02 の2か所に存在しているようです。 とりあえず、HKEY_CLASSES_ROOTだけに限って話を進めます。 >分かった原因は、レジストリキーを開けた時のリストの一番上に来る言語が優先されているということでした。 →自分のPCでは、この状態を作ることが困難なので、 >それぞれ場合でレジストリーをエクスポートしました。 →といううまくいったという実績を参考にしますね。 「analys32.xll」に限ってregファイルを作ってみると、自分のPCでは以下のような値のファイルになります。 ------------------ Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Installer\Components\5B5EF7AEDE9827842B7BD01C302B3B02] "analys32.xll"=hex(7):76,00,55,00,70,00,41,00,56,00,53,00,5e,00,2a,00,42,00,24,\ 00,21,00,21,00,21,00,21,00,21,00,4d,00,4b,00,4b,00,53,00,6b,00,45,00,78,00,\ 63,00,65,00,6c,00,41,00,64,00,64,00,69,00,6e,00,41,00,54,00,50,00,46,00,69,\ 00,6c,00,65,00,73,00,49,00,6e,00,74,00,6c,00,5f,00,31,00,30,00,34,00,31,00,\ 3c,00,06,52,90,67,c4,30,fc,30,eb,30,5c,00,71,7d,08,8a,66,5b,84,76,4a,30,88,\ 30,73,30,e5,5d,66,5b,84,76,06,52,90,67,92,30,4c,88,46,30,5f,30,81,30,6e,30,\ c7,30,fc,30,bf,30,06,52,90,67,c4,30,fc,30,eb,30,67,30,59,30,02,30,00,00,00,\ 00 ------------------ これを「analys32.xll.reg」というファイルに保存して、バッチファイルと同じフォルダに格納して、 バッチファイルを実行すると、添付の画像の「・・・コンポーネントが正常に動作しないことがあります。・・・・続行しますか?」と聞いてくるので、はいをクリックすると、「・・・レジストリに正常に追加されました」と表示して、実際に該当の箇所のレジストリに値が追加されました。 どこか手順が異なっているでしょうか? (知らず知らずのうちにだいぶ勉強しました) では
お礼
a-yoshiさん 至れり尽くせりの対応に感謝します。 うまくできない自分が不甲斐無いです(T0T) 今朝もう一度会社でバッチファイルを試したのですが、 ・・・コンポーネントが正常に動作しないことがあります。・・・・続行しますか?」 はどうしても表示されません。 レジストリキーをダブルクリックすればこの表示が出てきます。 指定したパスはUSBメモリの中のAddins Languageというフォルダの中のレジストリキーにしているつもりです。 E:\"Addins Language"\English\analys32.xll.regという感じでバッチファイルに記述してあります。 ◆ちなみに教えて頂いたバッチファイルは、Addins Languageフォルダの直下、 4つのレジストリキーと同じ場所に置いてあります。これは問題ないですか? [HKEY_CLASSES_ROOT\Installer\Components\5B5EF7AEDE9827842B7BD01C302B3B02] "analys32.xll"=hex(7):76,00,55,00,70,00,41,00,56,00,53,00,5e,00,2a,00,42,00,24,\ 00,21,00,21,00,21,00,21,00,21,00,4d,00,4b,00,4b,00,53,00,6b,00,45,00,78,00,\ 63,00,65,00,6c,00,41,00,64,00,64,00,69,00,6e,00,41,00,54,00,50,00,46,00,69,\ 00,6c,00,65,00,73,00,49,00,6e,00,74,00,6c,00,5f,00,31,00,30,00,34,00,31,00,\ 3c,00,06,52,90,67,c4,30,fc,30,eb,30,5c,00,71,7d,08,8a,66,5b,84,76,4a,30,88,\ 30,73,30,e5,5d,66,5b,84,76,06,52,90,67,92,30,4c,88,46,30,5f,30,81,30,6e,30,\ c7,30,fc,30,bf,30,06,52,90,67,c4,30,fc,30,eb,30,67,30,59,30,02,30,00,00,00,\ 00 ------------------ >これを「analys32.xll.reg」というファイルに保存して、バッチファイルと同じフォルダに格納して.. こ、こ、これはどうやればいいですか??... a-yoshiさんの環境で動くのであれば、バッチファイルの問題ではなく 私の環境の問題でしょうか....いや、私自身の問題のような気がします。
- a-yoshi
- ベストアンサー率34% (222/645)
a-yoshiです。 続きです。めげずに頑張りましょう。 で、直前のコメントに、 >バッチファイルからではなく、レジストリファイルを4つとも選択して、 Enter keyを押せば変更ができますので、ファイル自体は問題なさそうです.... 自分のパソコンに入っているのはEXCEL2007なのでそれを見てみると、たしかに存在しますね。但し、レジストリファイルの形式のものではないので、宜しければ、どんな指定がされているのか教えていただけますか?または、それが書かれたページを教えていただいてもよいです。 その4つの存在する場所を確認しました。 "C:\Program Files\Microsoft Office\Office12\Library\Analysis\ANALYS32.XLL" "C:\Program Files\Microsoft Office\Office12\Library\Analysis\ATPVBAEN.XLAM" "C:\Program Files\Microsoft Office\Office12\Library\Label Print\LABELPRINT.XLAM" "C:\Program Files\Microsoft Office\Office12\Library\SOLVER\SOLVER.XLAM" これらを直接に実行しても動作しませんでした。 ちなみに、フォルダの途中に空白が存在する場合は「"xxxxx xxxx"」とダブルクォーテーションでくくる必要があります。 今日は、こんなところで。 では
お礼
a-yoshiさん regeditを開いて頂き、検索でANALYS32.XLLを探しみてください。 そうするとHKEY_ROOTの下に4つのキーが出てくるはずです。 それぞれのキーをダブルクリックで開くと、アドインの名前と詳細な説明が日本語で書いてあると思います。(日本語OSの場合) 私は英語OSで多言語をサポートしている端末を使っているので、日本語以外に、韓国語、英語、中国語、アラビア語?がリストされています。 そもそもこの質問をするきっかけが、エクセルのアドインの名前が韓国語になってしまい、Officeを入れ直しても問題が改善されなかったので、レジストリをいじってみようということになりました。 分かった原因は、レジストリキーを開けた時のリストの一番上に来る言語が優先されているということでした。なので、日本語の場合、日本語の説明を一番上に持ってくることで、エクセルを開いた時にちゃんと日本語で表記されることが分かりました。 英語の場合は、英語を一番上に持ってくる、韓国語の場合は韓国語を一番上にと.... それぞれ場合でレジストリーをエクスポートしました。 それがバッチファイルで適用したいレジストリキーなのです。 (言葉足らずで申し訳ありません。。。理解して頂けると良いのですが....) またテストしてみます。
- a-yoshi
- ベストアンサー率34% (222/645)
a-yoshiです。 見落としていました。 >希望の動きとしては... > 例:日本語[2]を選択した時に、Japaneseフォルダの中にある4つのレジストリ全部を実行したい。 「Japaneseフォルダ」の指定がどこにもされていないように見受けられます。このままだと、バッチファイルが存在する場所しか参照されません。例えば「Japaneseフォルダ」等がどこか固定のフォルダに格納されているのでしたら、そこを指定するようにしたらよいです。Dドライブの\BATの配下に各々のフォルダがあるとした場合では、 LABEL1 D:\BAT\English\analys32.xll.reg D:\BAT\English\atpvbaen.xlam.reg D:\BAT\English\printlabel.xlam.reg D:\BAT\English\solver.xlam.reg pause GOTO END :LABEL2 D:\BAT\Japanese\analys32.xll.reg D:\BAT\Japanese\atpvbaen.xlam.reg D:\BAT\Japanese\printlabel.xlam.reg D:\BAT\Japanese\solver.xlam.reg pause GOTO END LABEL3 D:\BAT\Chinese\analys32.xll.reg D:\BAT\Chinese\atpvbaen.xlam.reg D:\BAT\Chinese\printlabel.xlam.reg D:\BAT\Chinese\solver.xlam.reg pause GOTO END LABEL4 D:\BAT\Korean\analys32.xll.reg D:\BAT\Korean\atpvbaen.xlam.reg D:\BAT\Korean\printlabel.xlam.reg D:\BAT\Korean\solver.xlam.reg pause GOTO END 先にコメントした手順とかregの内容のアップとかよりも、こちらのほうを先に試してみてください。 では
お礼
家のPCでテストしてみました。 Windows7 Home Premium Office2007 挙動がちょっと変わりましたが、エラーが前回と変わりました。 「指定されたバッチ、ラベルが見つかりません」-LABEL1 Enterを押すとエラーが一瞬表示され、すぐにDOS窓が消えます。 管理者として実行をしています。指定している場所が間違っている?? でも、DOS上のファイル名と ※regファイルは、USBメモリスティック(F:\)の中のAddins Language>English Japanese Chinese Koreanという4つのフォルダに入れてありますので、下記のように記述しました。 @ECHO OFF :MENU COLOR 9F CLS echo. echo ********** Add-ins Language Setting ********** echo [1] : English echo [2] : Japanese echo [3] : Chinese echo [4] : Korean echo [e] : (end) echo ************************************************ echo. set /p NUM=Please choose language : if "%NUM%"=="1" GOTO LABEL1 if "%NUM%"=="2" GOTO LABEL2 if "%NUM%"=="3" GOTO LABEL3 if "%NUM%"=="4" GOTO LABEL4 if /i "%NUM%"=="e" GOTO END GOTO MENU LABEL1 F:\Addins Language\English\analys32.xll.reg F:\Addins Language\English\atpvbaen.xlam.reg F:\Addins Language\English\printlabel.xlam.reg F:\Addins Language\English\solver.xlam.reg pause GOTO END :LABEL2 F:\Addins Language\Japanese\analys32.xll.reg F:\Addins Language\Japanese\atpvbaen.xlam.reg F:\Addins Language\Japanese\printlabel.xlam.reg F:\Addins Language\Japanese\solver.xlam.reg pause GOTO END LABEL3 F:\Addins Language\Chinese\analys32.xll.reg F:\Addins Language\Chinese\atpvbaen.xlam.reg F:\Addins Language\Chinese\printlabel.xlam.reg F:\Addins Language\Chinese\solver.xlam.reg pause GOTO END LABEL4 F:\Addins Language\Korean\analys32.xll.reg F:\Addins Language\Korean\atpvbaen.xlam.reg F:\Addins Language\Korean\printlabel.xlam.reg F:\Addins Language\Korean\solver.xlam.reg pause GOTO END :END echo. echo * Add-ins * END pause > NUL 引き続きヘルプをお願いします。m(_ _)m
補足
会社のPCで試しましたが、うまく動いてくれませんでした...(T0T) 自宅PCで試した時のようなエラーは無く、DOS窓が消えるだけでした。 うぅぅ.....分からないです バッチファイルからではなく、レジストリファイルを4つとも選択して、 Enter keyを押せば変更ができますので、ファイル自体は問題なさそうです.... (もう、挫折して普通にファイルをダブルクリックしてもらうかと思っています....) ちなみにこの4つのレジストリファイルは、Excel2010のビルトインのアドインです。 analys32.xll.reg atpvbaen.xlam.reg printlabel.xlam.reg solver.xlam.reg どのエクセルのバージョンでも、レジストリで検索をかけて頂くと出てくるはずです。
- a-yoshi
- ベストアンサー率34% (222/645)
a-yoshiです。 実行させたい命令をそのように連続して記述してもOKです。 但し、一つ一つが正常に実行されることが前提なので、今のままではだめですね。問題を解決しなければなりません。 で、どれも同じ内容のエラーですね。例えば一つ目は、 analys32.xll.reg is not recognized as an internal or external command, operatable program or batch file. 直訳: analys32.xll.regは、内部または外部コマンド、操作可能なプログラム、またはバッチファイルと認められません。 →つまり実行可能なプログラムではない。とwindowsは見ているようですね。 もし宜しければ、この4つのxxx.regファイルの中身を見せてくださいませ。おそらく、regファイルの記述の仕方に何か問題があるのでしょう。 コマンド・プロンプト上でレジストリを操作するためのツールは「reg.exe」というものです。 こちらのページがわかりやすいかと思います。 http://www.atmarkit.co.jp/fwin2k/win2ktips/391cmdreg/cmdreg.html ちょっと特殊な箇所で実際に使用したことがある例を以下に書きます。このままそっくり真似て書いてもうまくいきません。 set RegKey=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced > NUL reg add %RegKey% /v Hidden /t REG_DWORD /d 0x00000001 > NUL > NUL を付加すると、メッセージの出力を抑制します。バッチファイルが完成したあとにこれを付加するとよいでしょう。 では
- a-yoshi
- ベストアンサー率34% (222/645)
a-yoshiです。 続きです。レジストリの適用を実行したあと停止するようにポーズ文を入れてみました。 これで、レジストリの実行がどのように行われているかがわかると思います。 ----------------------- @ECHO OFF :MENU COLOR 9F CLS echo. echo ********** Add-ins Language Setting ********** echo [1] : English echo [2] : Japanese echo [3] : Chinese echo [4] : Korean echo [e] : (end) echo ************************************************ echo. set /p NUM=Please choose language : if "%NUM%"=="1" GOTO LABEL1 if "%NUM%"=="2" GOTO LABEL2 if "%NUM%"=="3" GOTO LABEL3 if "%NUM%"=="4" GOTO LABEL4 if /i "%NUM%"=="e" GOTO END GOTO MENU :LABEL1 analys32.xll.reg pause GOTO END :LABEL2 atpvbaen.xlam.reg pause GOTO END :LABEL3 printlabel.xlam.reg pause GOTO END :LABEL4 solver.xlam.reg pause GOTO END :END echo. echo * Add-ins * END pause > NUL ----------------------- あと、このプログラムを実行するときは、管理者権限があるユーザーで実行する必要があります。 一般的には、このバッチをダブるクリックして実行するのではなく、右クリックして「管理者として実行」をクリックして実行する必要があります。 試してみてください。 では
お礼
a-yoshiさん 本当に助かります。 月曜日に会社で試してみます。 また追ってご連絡差し上げます。 どうもありがとうございます。
補足
a-yoshiさん 管理者として実行したところ、下記のようなエラーが表示されうまくレジストリ適用まで処理できなかったようです。 analys32.xll.reg is not recognized as an internal or external command, operatable program or batch file. Please jit any key to continue. atpvbaen.xlam.reg is not recognized as an internal or external command, operatable program or batch file. Please jit any key to continue. printlabel.xlam.reg is not recognized as an internal or external command, operatable program or batch file. Please jit any key to continue. solver.xlam.reg is not recognized as an internal or external command, operatable program or batch file. Please jit any key to continue. 理由が分かれば教えてください。 希望の動きとしては... 例:日本語[2]を選択した時に、Japaneseフォルダの中にある4つのレジストリ全部を実行したい。 同様に英語でもEnglishフォルダの中にある4つのレジストリ全部を実行したい。中国語でも、韓国語でも同じです。 下記のような書き方でもOKですか? ----------------------- @ECHO OFF :MENU COLOR 9F CLS echo. echo ********** Add-ins Language Setting ********** echo [1] : English echo [2] : Japanese echo [3] : Chinese echo [4] : Korean echo [e] : (end) echo ************************************************ echo. set /p NUM=Please choose language : if "%NUM%"=="1" GOTO LABEL1 if "%NUM%"=="2" GOTO LABEL2 if "%NUM%"=="3" GOTO LABEL3 if "%NUM%"=="4" GOTO LABEL4 if /i "%NUM%"=="e" GOTO END GOTO MENU :LABEL1 analys32.xll.reg atpvbaen.xlam.reg printlabel.xlam.reg solver.xlam.reg pause GOTO END :LABEL2 analys32.xll.reg atpvbaen.xlam.reg printlabel.xlam.reg solver.xlam.reg pause GOTO END :LABEL3 analys32.xll.reg atpvbaen.xlam.reg printlabel.xlam.reg solver.xlam.reg pause GOTO END :LABEL4 analys32.xll.reg atpvbaen.xlam.reg printlabel.xlam.reg solver.xlam.reg pause GOTO END 何度も質問させて頂き申し訳ありません。
- a-yoshi
- ベストアンサー率34% (222/645)
a-yoshiです。 >ちなみに、LAVELのスペルはLABELでよろしいですか? あはは(^^;汗 はい、そうですね。ご指摘ありがとうございます。実際には予約語以外のスペルならなんでも良いです。 では
お礼
a-yoshiさん 昨日会社でテストしてみましたが、思う通りに動いてくれませんでした(T0T) 数字を選択して、Enterを押すとDOSの画面が消えるだけで何も起こりませんでした。 フォルダの中の4つのレジストリファイルを実行するにはどうしたら良いでしょうか? 各フォルダの中には下記のファイルが入っています。 analys32.xll.reg atpvbaen.xlam.reg printlabel.xlam.reg solver.xlam.reg 解決策を教えてください よろしくお願いします。
- a-yoshi
- ベストアンサー率34% (222/645)
こんな感じでいかがでしょうか。 @ECHO OFF :MENU CLS echo. echo ************** Add-ins Language Setting ************** echo [1] : English echo [2] : Japanese echo [3] : Chinese echo [4] : Korean echo [e] : (end) echo ******************************************************** echo. set /p NUM=Please choose language : if "%NUM%"=="1" GOTO LAVEL1 if "%NUM%"=="2" GOTO LAVEL2 if "%NUM%"=="3" GOTO LAVEL3 if "%NUM%"=="4" GOTO LAVEL4 if "%NUM%"=="e" GOTO END GOTO MENU :LAVEL1 echo English GOTO END :LAVEL2 echo Japanese GOTO END :LAVEL3 echo Chinese GOTO END :LAVEL4 echo Korean GOTO END :END (ここまで) なるべく汎用的に使えるようにしてみました。あとはサンプルを適時変更してください。 OKWave上からこのバッチをコピーすると、なぜか先頭行に空白が入るようなので、先頭行の空白は削除してください。 では
お礼
早速の回答ありがとうございます。 また、メニューに終了項目まで追加して頂き嬉しいです。 明日テストしてみます。 もしうまく動かなければまたご相談させて頂きます。 ちなみに、LAVELのスペルはLABELでよろしいですか?
お礼
a-yoshiさん できました!! ダブルクォーテーションマークの場所が間違っていました....汗 "E:\Addins Language\English\ANALYS32.XLL" これにしたらできました。 本当に長い間お付き合いくださいまして、ありがとうございました。 こんなに懇切丁寧に教えて頂けるとは思いませんでした。 今回教えて頂いたことは、今後の仕事にも活かせそうです。 また機会があれば色々と教えてください。 m(_ _)Thank you so much!!!