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

  • 質問

  • 簡単に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ファイルが再生されると、フォーマットの確認のときにウィンドウを手動で切り替える必要があります。

    お手数をおかけしてばかりで申し訳ありませんがよろしくお願いします。

    2017年9月18日 8:28

すべての返信

  • これで実行してみて下さい。

    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
    2017年9月18日 15:48
  • 早速の返信に感謝します。

    結果から申し上げると私の期待どおりの動きではありません。

    問題点は.wavファイルのパスが見つからないとエラーを出すこと、いつから導入されたか私には知識のないパワーシェルを使っていることです。

    解決した問題は最後まで実行してくれることです。

    .wavファイルは書くまでもないとは思いますが、d:\dism_script\sounds\に入っています。

    そこで新たな質問です。

    パワーシェルが導入されたのはウィンドウズのいくつからですか?

    どんなosを使っている人でも同じ動作をするでしょうか?

    安定性や互換性を求めるなら、vbsやwshで書いたほうがよいのでしょうか?

    その点が気になります。

    細かい質問ですがよろしくお願いします。

    2017年9月18日 19:22
  • 修正しました。

    パワーシェルは、XPから使えるので互換性に関しては、気にする程では無いかと思われます。

    win10 1703からコマンドシェルの標準がパワーシェルになりましたので、

    今後は、パワーシェル化が進むかもしれません。

    2017年9月19日 3:24
  • 修正ありがたいです。

    パワーシェルはまだ音声読み上げに対応していないので、便利だという話は聞くのですが、手を付けられていません。

    はやく音声化してくれないかなあ、、、!

    ところで、修正いただいたコードですが、「ファイル名またはディレクトリ、ヴォリュームラベルの構文が間違っています」と出てしまいます。

    それと不思議なのはパワーシェルにフルパスで書くなら、

    set path

    の行はいらない気がしますが、あえて置いてあるのはなぜですか?

    それとも、d:\dism_script\sounds\をパスに加えるのが正解なのでしょうか?

    自分でもやってみたいと思いますが、引き続きお付き合いのほどお願いします。

    自分なりの知識の中での検証結果です。

    あえてcmd.exeからバッチファイルを動かしてみると、やはり、フルパスでファイル名を書くと上記のエラーが出ます。

    set path=%path%;d:\dism?_script\sounds;

    として、ファイル名のみを記述すると、SoundPlayerに対するオブジェクトが生成されていません。パスが必要な場合には、パスを設定するかパスも含めて記述する必要があります。

    オブジェクトが作られていないことはわかりましたが、検索してみてもわかりません。

    お忙しいとは思いますが、どうかご鞭撻お願いします。

    2017年9月19日 12:09
  • コピペがうまく出来ていないような気がします。

    PowerShell "(New-Object Media.SoundPlayer('%windir%\media\tada.wav')).PlaySync()"
    

    この1行だけで、バッチにして音が鳴るか確かめて下さい。

    バッチそのものと、出来れば実行ログがあれば、修正します。

    パスを消していないのは、他で使用されていると思ったからです。

    あと気になったのですが、バッチは、ADKのコマンドプロンプトから実行されていますよね?

    2017年9月19日 17:34
  • 早々のご返答うれしく思います。 もちろん call copype や makemediawinpe の入っているバッチファイルは、展開およびイメージングツールサービスを右クリックして管理者から実行をえらんで、そのプロンプトで実行しています。 ----------pswavetest.bat----------

    PowerShell"(New-Object Media.SoundPlayer('%windir%\media\tada.wav')).PlaySync()"

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

    非常に初歩的な質問ですが、どうやって実行ログをファイルに出力すればいいのですか? d:\pswavetest.bat > d:\log.txt としてみましたが、エラー情報などは入っていませんでした。ちなみにエラー内容は同じでした。基本的な質問で申し訳ありませんが、きっと今後ご面倒をおかけすることが減ると思うので是非ご教授ください。

    2017年9月19日 20:04
  • 原因が分かりました。

    PowerShell と 「"」ダブルコーテーションの間に空白が入っていないからです。

    「PowerShell」の後に空白(スペース)を入れて下さい。

    エラーログは

    d:\pswavetest.bat 2> d:\log.txt

    で作成出来ます。

    2017年9月20日 3:23
  • いつも御教授ありがとうございます。

    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

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

    2017年9月20日 8:41
  • いつもお世話になってばかりですみません。

    あつかましいお願いでたいへん申し訳ないのですが、下のurlの質問にもお答えいただけると、とてもうれしいです。

    https://social.technet.microsoft.com/Forums/ja-JP/4a38d229-ce1c-4395-9596-6421ceee0829/winpewav?forum=win10itprogeneralJP

    回答の中でビープ音の提案と構文をご提示いただき、パワーシェルの組み込みのurlもアドバイスいただいたのですが、既にご理解いただいているとおり、音が何種類も必要な目が全く見えない人でも使えるという前提で全てのバッチファイルを作成しているので、やはりサウンドプレイヤーのモジュールもwinpeに組み込む必要があります。

    とても沢山の情報とご協力をいただいたので、urlだけでもいいので是非お願いします。


    2017年9月20日 12:05