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

バッチファイルの記述方法が分かりません。
あまり詳しくないため、どなたか分かりやすく教えてください。

【利用環境】
Windows 7 Enterprise 64bit

【やりたいこと】

・バッチファイルとレジストリファイルをUSBメモリ内に忍ばせておく
・レジストリファイルは言語ごとにフォルダ分けしてある
・フォルダ内には4つのレジストリファイルがある
・1~4選択式にする
 例:日本語の場合は"2"を選択する
・Enterを押すと、4つのレジストリが上書きされる。

------------------------------------------------------------

@echo off
echo ************ Add-ins Language Setting ************
echo [1] :  英語 / 英文 / English
echo [2] : 日本語 / 日文 / Japanese
echo [3] : 中国語 / 中文 / Chinese
echo [4] : 韓国語 / 韓文 / Korean
echo *****************************************************
set /p NUM="Please choose language >"
if"%NUM%"=="1"
if"%NUM%"=="2"
if"%NUM%"=="3"
if"%NUM%"=="4"


------------------------------------------------------------

色々調べてみたのですが、if"%NUM%"=="1"の後にどのような記述をすれば良いか分かりません。
また、この書き方でやりたいことができるかさえ分かっていません。

もし何か良い方法があれば是非教えてください!
宜しくお願いします。

A 回答 (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ドライブ直下に、バッチファイルとこれらレジストリバッチも入れると紛らわしさがなくなり必ず実行してくれますね。

今日は、こんなところで。

あと一息だと思います。ファイト!

では
    • good
    • 0
この回答へのお礼

a-yoshiさん

できました!!

ダブルクォーテーションマークの場所が間違っていました....汗

"E:\Addins Language\English\ANALYS32.XLL"
これにしたらできました。

本当に長い間お付き合いくださいまして、ありがとうございました。
こんなに懇切丁寧に教えて頂けるとは思いませんでした。

今回教えて頂いたことは、今後の仕事にも活かせそうです。
また機会があれば色々と教えてください。

m(_ _)Thank you so much!!!

お礼日時:2011/08/12 12:56

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」というファイルに保存して、バッチファイルと同じフォルダに格納して、
バッチファイルを実行すると、添付の画像の「・・・コンポーネントが正常に動作しないことがあります。・・・・続行しますか?」と聞いてくるので、はいをクリックすると、「・・・レジストリに正常に追加されました」と表示して、実際に該当の箇所のレジストリに値が追加されました。

どこか手順が異なっているでしょうか?

(知らず知らずのうちにだいぶ勉強しました)

では
「バッチファイルで複数のレジストリを上書き」の回答画像7
    • good
    • 0
この回答へのお礼

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さんの環境で動くのであれば、バッチファイルの問題ではなく
私の環境の問題でしょうか....いや、私自身の問題のような気がします。

お礼日時:2011/08/10 23:50

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"」とダブルクォーテーションでくくる必要があります。

今日は、こんなところで。

では
    • good
    • 0
この回答へのお礼

a-yoshiさん

regeditを開いて頂き、検索でANALYS32.XLLを探しみてください。
そうするとHKEY_ROOTの下に4つのキーが出てくるはずです。

それぞれのキーをダブルクリックで開くと、アドインの名前と詳細な説明が日本語で書いてあると思います。(日本語OSの場合)

私は英語OSで多言語をサポートしている端末を使っているので、日本語以外に、韓国語、英語、中国語、アラビア語?がリストされています。

そもそもこの質問をするきっかけが、エクセルのアドインの名前が韓国語になってしまい、Officeを入れ直しても問題が改善されなかったので、レジストリをいじってみようということになりました。

分かった原因は、レジストリキーを開けた時のリストの一番上に来る言語が優先されているということでした。なので、日本語の場合、日本語の説明を一番上に持ってくることで、エクセルを開いた時にちゃんと日本語で表記されることが分かりました。

英語の場合は、英語を一番上に持ってくる、韓国語の場合は韓国語を一番上にと....
それぞれ場合でレジストリーをエクスポートしました。

それがバッチファイルで適用したいレジストリキーなのです。
(言葉足らずで申し訳ありません。。。理解して頂けると良いのですが....)

またテストしてみます。

お礼日時:2011/08/10 11:02

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で試しましたが、うまく動いてくれませんでした...(T0T)
自宅PCで試した時のようなエラーは無く、DOS窓が消えるだけでした。
うぅぅ.....分からないです

バッチファイルからではなく、レジストリファイルを4つとも選択して、
Enter keyを押せば変更ができますので、ファイル自体は問題なさそうです....
(もう、挫折して普通にファイルをダブルクリックしてもらうかと思っています....)

ちなみにこの4つのレジストリファイルは、Excel2010のビルトインのアドインです。

analys32.xll.reg
atpvbaen.xlam.reg
printlabel.xlam.reg
solver.xlam.reg

どのエクセルのバージョンでも、レジストリで検索をかけて頂くと出てくるはずです。

補足日時:2011/08/09 09:10
    • good
    • 0
この回答へのお礼

家の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

お礼日時:2011/08/09 00:19

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/391cm …

ちょっと特殊な箇所で実際に使用したことがある例を以下に書きます。このままそっくり真似て書いてもうまくいきません。
set RegKey=HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced > NUL
reg add %RegKey% /v Hidden /t REG_DWORD /d 0x00000001 > NUL

> NUL を付加すると、メッセージの出力を抑制します。バッチファイルが完成したあとにこれを付加するとよいでしょう。

では
    • good
    • 0

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さん

管理者として実行したところ、下記のようなエラーが表示されうまくレジストリ適用まで処理できなかったようです。

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

何度も質問させて頂き申し訳ありません。

補足日時:2011/08/08 12:08
    • good
    • 0
この回答へのお礼

a-yoshiさん

本当に助かります。
月曜日に会社で試してみます。
また追ってご連絡差し上げます。

どうもありがとうございます。

お礼日時:2011/08/07 14:07

a-yoshiです。



>ちなみに、LAVELのスペルはLABELでよろしいですか?

あはは(^^;汗 はい、そうですね。ご指摘ありがとうございます。実際には予約語以外のスペルならなんでも良いです。

では
    • good
    • 0
この回答へのお礼

a-yoshiさん

昨日会社でテストしてみましたが、思う通りに動いてくれませんでした(T0T)
数字を選択して、Enterを押すとDOSの画面が消えるだけで何も起こりませんでした。

フォルダの中の4つのレジストリファイルを実行するにはどうしたら良いでしょうか?

各フォルダの中には下記のファイルが入っています。
analys32.xll.reg
atpvbaen.xlam.reg
printlabel.xlam.reg
solver.xlam.reg

解決策を教えてください
よろしくお願いします。

お礼日時:2011/08/06 06:44

こんな感じでいかがでしょうか。



@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上からこのバッチをコピーすると、なぜか先頭行に空白が入るようなので、先頭行の空白は削除してください。

では
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
また、メニューに終了項目まで追加して頂き嬉しいです。
明日テストしてみます。

もしうまく動かなければまたご相談させて頂きます。

ちなみに、LAVELのスペルはLABELでよろしいですか?

お礼日時:2011/08/05 00:59

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