none
win10_1703_ja-jp .batファイルに引数を受け取ってもらったり、一つの処理が終わる度にビープ音を発生させるにはどうすれば「いいですか? RRS feed

  • 質問

  • いつもご教授いただきありがとうございます。今回もよろしくお願いします。

    windows adkの展開およびイメージングサービスとdismを使用して、パーティションの管理しようと思っています。

    例えば下のようなバッチファイルを組んで、次のように実行させたいのです。

    ------- ここからバッチファイル -------

    @echo off

    [実行が開始されたビープ音発生]

    net start wlansvc
    netsh wlan add profile filename="d:\Wi-Fi-aterm-c77b67-a.xml"
    net use n: \\192.168.1.251\images

    [ワイファイに接続できたのでビープ音2回発生]

    dism capture-image /capturedir:c:\ /index:1 /imagefile:n:\partition\[与えられたファイル名] /name:"system partition" /compress:maximum

    [処理が完了したらビープ音を3回発生]

    ------- ここまでバッチファイル -------

    これをcptprtimg.batとして

    cptprtimg.bat file=yyyy-mm-dd-hh-mm-sysprt.wim

    のようにしたいのです。

    また、イメージの適応のときにも

    実行開始で1回、diskpart完了で2回、ワイファイ接続完了で3回、のようにして、aplprtimg.batとしたとして、

    aplprtimg.bat file=yyyy-mm-dd-hh-mm-sysprt.wim

    のように実行したいのです。

    ファイル名をどんなコマンドで受け取ればいいですか?


    いままではcopy con d:\beep.bat\

    @echo off

    echo beep sound test

    echo [ctrl+g]

    [ctrl+z]

    これでビープ音が発生していたのですが、win10-1703にしてから、この方法では、不正な内部コマンドか利用可能な外部コマンドでは

    2017年8月14日 16:39

回答

  • yyyy-mm-dd-hh-mm-sysprt.wim は

    for /f "tokens=1-6 delims=/:." %%1 in ("%date%.%time: =0%") do set file=%%1-%%2-%%3-%%4-%%5-sysprt.wim

    でいけると思います。

    beep の件ですが

    32ビットのbeep.exeは、いくつか発見したのに対して、64ビット版を見付ける事が出来ませんでした。

    苦肉の策として思いついたのは、外付けのCDドライブを3つ用意していただき

    イジェクトコマンドでCDトレイを排出させ、排出先に鈴のような打撃で音を発生させるような物を置いておく方法です。

    イジェクトのコマンドは、 http://download.sysinternals.com/files/Sync.zip を使います。

    バッチで最初に使用許諾回避のコマンドを入れて

    REG ADD "HKCU\SOFTWARE\Sysinternals\Sync" /f /v "EulaAccepted" /t REG_DWORD /d "1" > nul

    [実行が開始されたビープ音発生]で

    sync -e f:

    [ワイファイに接続できたのでビープ音2回発生]で

    sync -e g:

    [処理が完了したらビープ音を3回発生]で

    sync -e h:

    で、それぞれトレイの排出先に音色の違うものを置いておきます。

    引き続き、音を鳴らす方法は探しますが、とりあえず、この方法で凌いでいくというのは、どうでしょうか。


    2017年8月15日 18:27
  • チャブーンです。

    #CD-ROMのトレイを使う、というのはなかなか楽しいかも...と個人的には思いましたが。

    MS-DOSでBeep音を出す方法ですが、Windows XPより後のOSだと、バッチの中で「^G」コントロール文字(いわゆるBEL文字)を表示させるという方法が必要なようです。

    したのページによいやり方がありましたので、ご紹介しておきます。

    http://neos21.hatenablog.com/entry/2017/02/11/003814

    For /f "delims=0" %a In ('cmd /u /c Echo 〇') Do @Echo %a

    うえのポイントは、漢数字の零(丸ではありません)をASCIIコード"0x7"相当でパイプすることで、BEL文字をコマンドプロンプトで利用させる、というもののようですね。

    なお、いわゆる汎用PCのBeep音はWindows 10では出せませんので、Windows標準のBeep音が前提になります。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。



    2017年8月16日 7:58
  • チャブーンです。

    早速貼っていただいたコードを試してみましたら、短いビープ音が3回鳴ったような気がしますが、これが、windows10の標準ビープ音ということなのでしょうか?

    その通りです(ただし3回鳴らすかどうかはバッチの内容次第です)。現在のWindowsのBeep音は、Windowsのシステムサウンドに依存しています。もしこの音が気に入らない、ということでしたら、システムサウンドの(たぶん)「システムエラー」音を別のwavファイルに代えてもらう必要があるでしょう。

    ところで、ここは無償サポートの場であることは認識したうえでの投稿のつもりですが、なにか不適切な発言がありましたら、具体的に注意をいただけるとうれしく思います。

    ご覧になった部分は「署名」と呼ばれるエリアで、ここでは質問者さん個人へのコメントではなく、すべての方向けへのメッセージとお考えください。質問者さんは該当しなくても、実態として「有償サポートにおける『お客様』」として振る舞う質問者さんが回答者とトラブルになる例があまりにも多いため、一般的な注意喚起として書かせていただいています。ちなみに内容については、リンク先にちゃんと書いてありますので、ご自身で読んでおかれることをお奨めします。

    あとどうでもよいことですが、コミュニティにおいて「返信を要求する」ことは、どんなに言葉尻が柔らかくても、マナーとしては好ましくありません。返信者はたいてい多忙であり、いちいち要求に応えていたら、精神的に大変な状況になるためです。「ばかな」と思われるかもしれませんが、「パソコン通信」「CompuServe」「ニフティサーブ」といった大昔のコミュニティを理解されている(であろう)、職場のセンパイがいらっしゃれば、一度伺ってみるといいかもしれません。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。




    2017年8月16日 23:34

すべての返信

  • yyyy-mm-dd-hh-mm-sysprt.wim は

    for /f "tokens=1-6 delims=/:." %%1 in ("%date%.%time: =0%") do set file=%%1-%%2-%%3-%%4-%%5-sysprt.wim

    でいけると思います。

    beep の件ですが

    32ビットのbeep.exeは、いくつか発見したのに対して、64ビット版を見付ける事が出来ませんでした。

    苦肉の策として思いついたのは、外付けのCDドライブを3つ用意していただき

    イジェクトコマンドでCDトレイを排出させ、排出先に鈴のような打撃で音を発生させるような物を置いておく方法です。

    イジェクトのコマンドは、 http://download.sysinternals.com/files/Sync.zip を使います。

    バッチで最初に使用許諾回避のコマンドを入れて

    REG ADD "HKCU\SOFTWARE\Sysinternals\Sync" /f /v "EulaAccepted" /t REG_DWORD /d "1" > nul

    [実行が開始されたビープ音発生]で

    sync -e f:

    [ワイファイに接続できたのでビープ音2回発生]で

    sync -e g:

    [処理が完了したらビープ音を3回発生]で

    sync -e h:

    で、それぞれトレイの排出先に音色の違うものを置いておきます。

    引き続き、音を鳴らす方法は探しますが、とりあえず、この方法で凌いでいくというのは、どうでしょうか。


    2017年8月15日 18:27
  • チャブーンです。

    #CD-ROMのトレイを使う、というのはなかなか楽しいかも...と個人的には思いましたが。

    MS-DOSでBeep音を出す方法ですが、Windows XPより後のOSだと、バッチの中で「^G」コントロール文字(いわゆるBEL文字)を表示させるという方法が必要なようです。

    したのページによいやり方がありましたので、ご紹介しておきます。

    http://neos21.hatenablog.com/entry/2017/02/11/003814

    For /f "delims=0" %a In ('cmd /u /c Echo 〇') Do @Echo %a

    うえのポイントは、漢数字の零(丸ではありません)をASCIIコード"0x7"相当でパイプすることで、BEL文字をコマンドプロンプトで利用させる、というもののようですね。

    なお、いわゆる汎用PCのBeep音はWindows 10では出せませんので、Windows標準のBeep音が前提になります。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。



    2017年8月16日 7:58
  • 早速のお返事ありがとうございます。

    たしかにイメージをキャプチャするときはそれでいけるような気がしますし、引数を打ち込むよりよいご提案をいただいたと思います。しかし、展開するときにもっとも新しいファイルを探すことができ、それをapply-image /imagefileに適応させることはできるでしょうか?

    そして、実際にcapture-image /imagefileオプションにはどのように記述すればいいかもご教授いただきたいと思います。

    また、私のパソコンには

    、タイプc一つしかなく、cdロムドライブを3つ同時に繋ぐことは不可能ですが、どのようにすればよいでしょうか?

    よろしくご教授お願いします。


    2017年8月16日 16:08
  • ご親切な返信ありがとうございます。

    ところで、ここは無償サポートの場であることは認識したうえでの投稿のつもりですが、なにか不適切な発言がありましたら、具体的に注意をいただけるとうれしく思います。

    早速貼っていただいたコードを試してみましたら、短いビープ音が3回鳴ったような気がしますが、これが、windows10の標準ビープ音ということなのでしょうか?

    リンク先にバッチファイル内で使うコードがありましたので、テスト用のバッチファイルを作って試してみたいと思います。

    引き続き返信を楽しみにお待ちしています。

    今後とも是非ともよろしくお願いします。

    2017年8月16日 16:51
  • チャブーンです。

    早速貼っていただいたコードを試してみましたら、短いビープ音が3回鳴ったような気がしますが、これが、windows10の標準ビープ音ということなのでしょうか?

    その通りです(ただし3回鳴らすかどうかはバッチの内容次第です)。現在のWindowsのBeep音は、Windowsのシステムサウンドに依存しています。もしこの音が気に入らない、ということでしたら、システムサウンドの(たぶん)「システムエラー」音を別のwavファイルに代えてもらう必要があるでしょう。

    ところで、ここは無償サポートの場であることは認識したうえでの投稿のつもりですが、なにか不適切な発言がありましたら、具体的に注意をいただけるとうれしく思います。

    ご覧になった部分は「署名」と呼ばれるエリアで、ここでは質問者さん個人へのコメントではなく、すべての方向けへのメッセージとお考えください。質問者さんは該当しなくても、実態として「有償サポートにおける『お客様』」として振る舞う質問者さんが回答者とトラブルになる例があまりにも多いため、一般的な注意喚起として書かせていただいています。ちなみに内容については、リンク先にちゃんと書いてありますので、ご自身で読んでおかれることをお奨めします。

    あとどうでもよいことですが、コミュニティにおいて「返信を要求する」ことは、どんなに言葉尻が柔らかくても、マナーとしては好ましくありません。返信者はたいてい多忙であり、いちいち要求に応えていたら、精神的に大変な状況になるためです。「ばかな」と思われるかもしれませんが、「パソコン通信」「CompuServe」「ニフティサーブ」といった大昔のコミュニティを理解されている(であろう)、職場のセンパイがいらっしゃれば、一度伺ってみるといいかもしれません。


    フォーラムは有償サポートとは異なる「コミュニティ」です。フォーラムでご質問頂くにあたっての注意点 をご一読のうえ、お楽しみください。




    2017年8月16日 23:34
  • 早速のお返事に感謝もうしあげます。

    私には、音が気に入らないとかそんな次元の話ではありません。

    winpeでusbブートしたときなどは、音声読み上げも使えないので、1つの処理が終わったことを認識できるための方法としてビープ音を考えました。

    コミュニティの健全性の件も丁寧にご説明いただき、ありがとうございました。

    今後ともよろしくお願いします。

    ご提示いただいたurlのバッチファイルのコードをコピーして実行するとエラーになってしまいます。

    win10_1703_ja-jpでは使えなくなってしまったのでしょうか?

    ご教授お願いします。

    2017年8月18日 3:17
  • WinPEで音を鳴らすのは難しいので、代替え案を2つ用意しました。

    PEに接続しているNASにPEからファイルを書き込み、他のパソコンで

    ① 音を鳴らす

    ② メールを飛ばして、着信音で判別

    というのは如何でしょうか。

    まず、PE側で

    Startnet.cmd
    rem /;
    rem /; WinPEで実行
    rem /;
    rem /; NAS を N ドライブとした場合
    rem /;
    
    rem /; コマンド終了後
    
    typ nul>      "N:\完了.txt"
    

    確認したいコマンドが終わった所で、NASにファイルを作成します。

    次にNASにアクセス出来るPCにファイル監視をさせ、音を鳴らします。

    Play_sound.cmd
    rem /;
    rem /; NAS に接続したPCで実行
    rem /;
    rem /; NAS を N ドライブとした場合
    rem /;
    
    :Wait_Complete
    ping -n 10 localhost > nul
    if  not Exist "N:\完了.txt" go to :Wait_Complete
    PowerShell "(New-Object Media.SoundPlayer('.\complete.wav')).PlaySync()"
    

    メールを飛ばしたい場合、NASにアクセス出来るPCにファイル監視をさせ、

    バッチからVBSでメールを飛ばします。

    Send_mail.cmd
    rem /;
    rem /; NAS に接続したPCで実行
    rem /;
    rem /; NAS を N ドライブとした場合
    rem /;
    
    :Wait_Complete
    ping -n 10 localhost > nul
    if  not Exist "N:\完了.txt" go to :Wait_Complete
    CALL CSCRIPT    //NOLOGO ".\sendmail.VBS" "メール宛先" "メールサーバー"
    


    sendmail.VBS
    Set  oMsg     = CreateObject("CDO.Message")
    
    oMsg.From     = "完了メール <dummy@dummy>"
    oMsg.To       = WScript.Arguments(0)
    oMsg.Subject  = "WINPEの作業が完了しました"
    oMsg.TextBody = "WINPEの作業が完了しました"
    
    oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing")      = 2
    oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver")     = WScript.Arguments(1)
    oMsg.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    oMsg.Configuration.Fields.Update
    oMsg.Send
    

    メールサーバーは、送信専用のメールサーバーを指定して下さい。

    うまく飛ばなかったら、これ以外のメールの飛ばし方を知らないので管理者に相談して下さい。

    2017年9月18日 16:31