質問者
展開およびイメージングツールの中でバッチファイルを実行できないのはなぜですか?

質問
-
簡単にwindows adk をインストールしている人ならWinPe起動用usbを作れるためにバッチファイルを書いていますが、最後まで実行してくれません。
自分のように全く目が見えない人のことも考えて.waveファイルも用意しました。
いったいなにが悪いのかご教授いただきたくとうこうしました。
ちなみにバッチファイルの内容をコピーペーストすると問題なく実行します。
1行目のcopypeの行で止まって、続きは実行してくれません。
以下コードです。
----------makewinpe.bat----------
set path=%path%;d:\dism_script;
.\sounds\start.wav
copype amd64 d:\amd64
.\sounds\progress.wav
dism /mount-image /imagefile:d:\amd64\media\sources\boot.wim /index:1 /mountdir:d:\amd64\mount
Dism /Image:d:\amd64\mount /Set-LayeredDriver:6
.\sounds\progress.wav
dism /apply-image /imagefile:c:\windows\system32\recovery\winre.wim /index:1 /applydir:d:\amd64\mount
.\sounds\progress.wav
dism/unmount-image /mountdir:d:\amd64\mount /commit
.\sounds\progress.wav
makewinpemedia /ufd d:\amd64 e:
.\sounds\complete.wav---------------------------------
それに、現在は何か書き方が悪いからでしょうが、.wavファイルは再生されませんが、再生されるとグルーブミュージックというウィンドウが開きますが、なにもウィンドウを開かずに.wavファイルを再生する方法はないものでしょうか?
この状況で.wavファイルが再生されると、フォーマットの確認のときにウィンドウを手動で切り替える必要があります。
お手数をおかけしてばかりで申し訳ありませんがよろしくお願いします。
すべての返信
-
これで実行してみて下さい。
set path=%path%;d:\dism_script; PowerShell "(New-Object Media.SoundPlayer('d:\dism_script\sounds\start.wav')).PlaySync()" call copype amd64 d:\amd64 PowerShell "(New-Object Media.SoundPlayer('d:\dism_script\sounds\progress.wav')).PlaySync()" dism /mount-image /imagefile:d:\amd64\media\sources\boot.wim /index:1 /mountdir:d:\amd64\mount Dism /Image:d:\amd64\mount /Set-LayeredDriver:6 PowerShell "(New-Object Media.SoundPlayer('d:\dism_script\sounds\progress.wav')).PlaySync()" dism /apply-image /imagefile:c:\windows\system32\recovery\winre.wim /index:1 /applydir:d:\amd64\mount PowerShell "(New-Object Media.SoundPlayer('d:\dism_script\sounds\progress.wav')).PlaySync()" dism /unmount-image /mountdir:d:\amd64\mount /commit PowerShell "(New-Object Media.SoundPlayer('d:\dism_script\sounds\progress.wav')).PlaySync()" ECHO;y| call makewinpemedia /ufd d:\amd64 e: PowerShell "(New-Object Media.SoundPlayer('d:\dism_script\sounds\complete.wav')).PlaySync()"
まず、COPYPEですが、これもバッチファイルなので
コマンドプロンプトから貼り付けて実行する場合は、よいのですが
バッチに書く場合、call COPYPEにしないと戻ってきません。
makewinpemedia の前にもCALL が書いてあるのは、そのためです。
なにもウィンドウを開かずに.wavファイルを再生する方法は、POWER SHELLを使うと出来ます。
おまけで、makewinpemedia の y の 入力を省くようにしました。
- 編集済み 七辻屋 2017年9月19日 3:03
-
早速の返信に感謝します。
結果から申し上げると私の期待どおりの動きではありません。
問題点は.wavファイルのパスが見つからないとエラーを出すこと、いつから導入されたか私には知識のないパワーシェルを使っていることです。
解決した問題は最後まで実行してくれることです。
.wavファイルは書くまでもないとは思いますが、d:\dism_script\sounds\に入っています。
そこで新たな質問です。
パワーシェルが導入されたのはウィンドウズのいくつからですか?
どんなosを使っている人でも同じ動作をするでしょうか?
安定性や互換性を求めるなら、vbsやwshで書いたほうがよいのでしょうか?
その点が気になります。
細かい質問ですがよろしくお願いします。
- 編集済み win10-syoshinsya 2017年9月18日 20:33
-
修正ありがたいです。
パワーシェルはまだ音声読み上げに対応していないので、便利だという話は聞くのですが、手を付けられていません。
はやく音声化してくれないかなあ、、、!
ところで、修正いただいたコードですが、「ファイル名またはディレクトリ、ヴォリュームラベルの構文が間違っています」と出てしまいます。
それと不思議なのはパワーシェルにフルパスで書くなら、
set path
の行はいらない気がしますが、あえて置いてあるのはなぜですか?
それとも、d:\dism_script\sounds\をパスに加えるのが正解なのでしょうか?
自分でもやってみたいと思いますが、引き続きお付き合いのほどお願いします。
自分なりの知識の中での検証結果です。
あえてcmd.exeからバッチファイルを動かしてみると、やはり、フルパスでファイル名を書くと上記のエラーが出ます。
set path=%path%;d:\dism?_script\sounds;
として、ファイル名のみを記述すると、SoundPlayerに対するオブジェクトが生成されていません。パスが必要な場合には、パスを設定するかパスも含めて記述する必要があります。
オブジェクトが作られていないことはわかりましたが、検索してみてもわかりません。
お忙しいとは思いますが、どうかご鞭撻お願いします。
- 編集済み win10-syoshinsya 2017年9月19日 13:55
-
早々のご返答うれしく思います。 もちろん call copype や makemediawinpe の入っているバッチファイルは、展開およびイメージングツールサービスを右クリックして管理者から実行をえらんで、そのプロンプトで実行しています。 ----------pswavetest.bat----------
PowerShell"(New-Object Media.SoundPlayer('%windir%\media\tada.wav')).PlaySync()"
----------------------------------
非常に初歩的な質問ですが、どうやって実行ログをファイルに出力すればいいのですか? d:\pswavetest.bat > d:\log.txt としてみましたが、エラー情報などは入っていませんでした。ちなみにエラー内容は同じでした。基本的な質問で申し訳ありませんが、きっと今後ご面倒をおかけすることが減ると思うので是非ご教授ください。
- 編集済み win10-syoshinsya 2017年9月19日 20:10
-
いつも御教授ありがとうございます。
PowerShellの後ろの"の間にスペースを入れてもダメで、結局現在はフルパスで書いています。
したがってパス設定も削除しました。
makewinpe.bat > d:\log.txtとしても、画面に出てくるエラー情報が入ってきません。
set log=d:\log.txt
というのを見つけたのですが、それでもやはりログを取りたいところで > %log%
としてもやはりなにも入りません。
いったいどうしたものでしょうね。
ログを取る件は、今回はお忙しいでしょうから回答はふようです。
makewinpe.batをかなり改変したので、他の人に役立てばと思い、下にコードを張っておきます。
この度はとてもお世話になりました。
今後ともよろしくお願いします。
---------------ここからコード---------------
@echo off
net use n: \\192.168.1.251\images
Powershell "(New-Object Media.SoundPlayer('n:\scr\sounds\start.wav')).PlaySync()"
call copype amd64 n:\amd64
Powershell "(New-Object Media.SoundPlayer('n:\scr\sounds\progress.wav')).PlaySync()"
dism /mount-image /imagefile:n:\amd64\media\sources\boot.wim /index:1 /mountdir:n:\amd64\mount
Dism/Image:n:\amd64\mount /Set-LayeredDriver:6
Powershell "(New-Object Media.SoundPlayer('n:\scr\sounds\progress.wav')).PlaySync()"
dism /append-image /imagefile:c:\windows\system32\recovery\winre.wim /index:1/mountdir:n:\amd64\mount /checkIntegrity /verify /NoRpFix
Powershell "(New-Object Media.SoundPlayer('n:\scr\sounds\progress.wav')).PlaySync()"
dism /unmount-image /mountdir:n:\amd64\mount /checkIntegrity /verify /NoRpFix /commit
Powershell "(New-Object Media.SoundPlayer('n:\src\sounds\progress.wav')).PlaySync()"
ECHO;y| call makewinpemedia /ufd n:\amd64 e:
Powershell "(New-Object Media.SoundPlayer('n:\scr\sounds\progress.wav')).PlaySync()"
md e:\sounds
echo:
echo:
echo 関連ファイルのコピーを追加でおこなっています。
echo:
echo しばらくお待ちください。
xcopy /e n:\scr\sounds e:\sounds\
copy n:\scr tools\*.txt e:\*.*
copy n\scr\tools\cp*.bat e:\*.*
copy n:\scr\tools\ap*.bat e:\*.*
Powershell "(New-Object Media.SoundPlayer('n:\scr\sounds\complete.wav')).PlaySync()"
echo 起動メディアが作成できました。
echo:安全性のため何かキーをおすとシャットダウンします。
echo:完全に電源が切れたことを確認して、メディアを取り外してください。
pause
shutdown -s----------------------------------------
-
いつもお世話になってばかりですみません。
あつかましいお願いでたいへん申し訳ないのですが、下のurlの質問にもお答えいただけると、とてもうれしいです。
https://social.technet.microsoft.com/Forums/ja-JP/4a38d229-ce1c-4395-9596-6421ceee0829/winpewav?forum=win10itprogeneralJP
回答の中でビープ音の提案と構文をご提示いただき、パワーシェルの組み込みのurlもアドバイスいただいたのですが、既にご理解いただいているとおり、音が何種類も必要な目が全く見えない人でも使えるという前提で全てのバッチファイルを作成しているので、やはりサウンドプレイヤーのモジュールもwinpeに組み込む必要があります。
とても沢山の情報とご協力をいただいたので、urlだけでもいいので是非お願いします。
- 編集済み win10-syoshinsya 2017年9月20日 12:07