バッチファイルの作り方

*** 日頃の定型的な操作を自動化したい方へ***

 2006年11月14日、マイクロソフトよりWindows上の新しいコマンドライン(シェル)環境である、 Windows PowerShell(稼動OS:XP以降)がリリース(無償)されました。 Windows 7 以降のOSでは標準実装されています。 従来Windows上で作成に不自由していたバッチファイルのような処理も、 はるかに強力なシェル環境が提供されたことにより、実現できることのレベルも飛躍的に高まったものと思われます。 新しいシェル環境でもTRYCUTの起動オプションの利用ができます。 むしろ、このシェル環境によって起動オプション(それぞれのヘルプ 2000, 3000, 5000)の利用価値が高まったと言えます。

 PowerShellについては既に様々なページで紹介されています。
https://ja.wikipedia.org/wiki/Windows_PowerShell

 なお、本ページは、あくまでも従来のコマンドライン上でのバッチファイル作成についての内容になっています。 もし、バッチファイルの作成で限界があるようでしたら、UNIXのクローン環境(後述)も検討の余地がありますが、 このPowerShellは、後発であるがゆえUNIXのシェル環境をも凌駕してしまうぐらいの出来栄えです。 今後はWindows PowerShell上での構築も検討のひとつに加えていただきたいところです。


  • 粗/中仕上げ/仕上げなど複数NCデータを連続実行し結果も残しておきたい。
  • 必要突出し長、加工時間などをひとつのログファイルにまとめたい。
  • 夜間に連続処理を登録しておきたい。

     こんなことを思ったことのある方は、このページを読んで下さい。 ただし、現在WindowsNT4.0,2000,XP,Vista,7,8,10のいずれかで稼動させている方に限ります。 (※95,98,Me利用の方は、別ソフトの「寝太郎」(フリーソフト)を利用して下さい。 この場合、EXE形式のファイルの連続実行のみの対応となります。)

     従来のDOS時代から、コンソール上でコマンドをマクロ化して連続実行するバッチファイル(*.BAT)が使われてきました。 昨今のウィンドウ・システムの登場によりコマンドライン(コンソール)は、 Windows95以降から無くなってしまうという噂もありました。 しかし現在もマイクロソフト自身が配布するツールもコマンドラインをベースにしたものが多く、 プロフェッショナルなプログラマーの多くは、 コマンドライン上でバッチファイルを作成して作業の効率を上げているのが現状です。 (※このページを公開して以来、 TRYCUTユーザーとは全く関係ない方々からバッチファイル作成方法に関する質問が来ます。)

    参考:コマンドプロンプトを使ってみよう

     TRYCUT2000/3000/5000の起動形式(特に/X5 や /X6 オプション)も、 このバッチファイルの中に記述して実行できるようにし、少しでも自動化できるようにとの目的で用意しているものです。

     このバッチファイルとTRYCUT2000/3000/5000の起動形式さえマスターすれば、 シミュレーション作業の様々な自動化が行えるものと思います。 また更にシミュレーション前のCAMシステムやシミュレーション後のDNC処理などもコマンドライン起動ができるなら、 さらに進化した環境が構築できるはずです。

    ※コマンドラインで作業するには、まずは

    Windows95,98,Meにおいては、
    「スタート」->「プログラム(P)」->「アクセサリー」->「MS-DOSプロンプト」

    WindowsNT4.0,2000,XP,それ以降のOSもほぼ同様
    「スタート」->「プログラム(P)」->「アクセサリー」->「コマンドプロンプト(cmd)」

    を起動して下さい。頻繁に実行する場合は、上のようにフォーカスが当たっている 状態で右クリックして「送る」->「デスクトップ」を選択し、デスクトップにショートカットを作成しておいていただくと再起動が簡単で便利です。


    <バッチファイルの作り方>
    1.バッチファイルは拡張子(*.BAT)のファイルで作ります。
    2.テキスト形式のファイルですのでnotepadや秀丸エディターなどの デキストエディターで記述します。
    3.%1 %2 %3 は、引数の文字列として利用できます。

    <バッチファイルの例>
    [機能例]
     ワーク形状と、粗どり・中仕上げ・仕上げの3つのNCデータを指定して、 それぞれの必要突出し長と、加工時間、加工長さをログに残し、 またそれぞれの工程の加工形状も保存するという処理をいっきに実行する。

    [前提]
    ・初期設定ファイル(TRYCUT.INI)内で、
    ARBOR-CHECK =OUTPUT にする。
    ・帳票出力の定義フォーマット"VERIFY_FORM.DEF"は、 インストール時のものと同じものを利用。

    [起動フォーム]
    cut [被切削材名] [NCファイル名1][NCファイル名2][NCファイル名2]
    ※被切削材は、DMF形式,STL形式のいずれでもOK。

    [出力例]
     「寝太郎」(フリーソフト)の中にあるサンプルファイルを利用し、
    cut nifty0.dmf nifty1 nifty2 nifty3 [Enter]
    で実行した結果がログファイル("trycut.log")に以下のように書き出されます。
    ___________________________________________________________
    2000/06/06 14:45:59:nifty1.nc
    非切削部分| 339(mm) | 2(秒)
    切削部分 | 610(mm) | 42(秒)
    総 和 | 949(mm) | 44(秒)
    T19:ブルエンドミル:突出= 6.000以上
    ___________________________________________________________
    2000/06/06 14:46:02:nifty2.nc
    非切削部分| 659(mm) | 4(秒)
    切削部分 | 102(mm) | 61(秒)
    総 和 | 761(mm) | 65(秒)
    T21:その他の工具:ARBOR未定義(算出不能)
    ___________________________________________________________
    2000/06/06 14:46:04:nifty3.nc(62) - 工具が破損しました(G00干渉)
    非切削部分| 665(mm) | 5(秒)
    切削部分 | 588(mm) | 240(秒)
    総 和 | 1253(mm) | 245(秒)
    T05:ボールエンドミル:突出= 6.000以上

    [バッチファイルの中身]
    "cut.bat"というファイル名で以下のような記述内容のファイルをTRYCUT2000/3000インス トール・フォルダに用意する。
    ERASE trycut.log
    @
    IF NOT EXIST %2.nc GOTO END
    ECHO ______________________________________________________ >>trycut.log
    TRYCUT /d %1 /o %2.dmf /x5 /v %2.nc
    TYPE VERIFY.TXT | FIND "mm" >>trycut.log
    TYPE 突出し長.TXT | FIND "=" >>trycut.log
    @
    IF NOT EXIST %3.nc GOTO END
    ECHO ______________________________________________________ >>trycut.log
    TRYCUT /d %2.dmf /o %3.dmf /x5 /v %3.nc
    TYPE VERIFY.TXT | FIND "mm" >>trycut.log
    TYPE 突出し長.TXT | FIND "=" >>trycut.log
    @
    IF NOT EXIST %4.nc GOTO END
    ECHO ______________________________________________________ >>trycut.log
    TRYCUT /d %3.dmf /o %4.dmf /x5 /v %4.nc
    TYPE VERIFY.TXT | FIND "mm" >>trycut.log
    TYPE 突出し長.TXT | FIND "=" >>trycut.log
    @
    :END
    NOTEPAD trycut.log

    ※/X5 のところを /X6 に変更すれば、TRYCUT2000/3000は最小化された状態で実行されます。
    ※上記FINDコマンドは、指定された文字を含む行のみ抜き出すというものです。 TYPEコマンドからのパイプで処理しているのは、ファイル名をなくすためのフォローです。
     もしその必要がなければ、
    FIND "秒" VERIFY.TXT >>trycut.log
    のような記述でも問題ないです。
     また、全行ログに残してもよいのであれば、
    TYPE VERIFY.TXT >>trycut.log
    でもよいわけです。

     また補足になりますが、FIND処理の結果、 指定文字列が見つかっていたか否かで処理の分岐を行いたいことがよくあります。 このような場合は"IF ERRORLEVEL"を利用することができます。
    FINDコマンドが正常終了した場合は、直後のERRORLEVELは"0"、 異常終了(指定文字列が無かった)時は"1"になっていますので、 この違いを利用して分岐させることができます。

    例えば、以下のような流れで記述できます。

    FIND "文字列" 検索ファイル名
    IF ERRORLEVEL 1 GOTO NASHI
    IF ERRORLEVEL 0 GOTO ARI
    :NASHI



    GOTO END
    :ARI



    :END

    注意: IF ERRORLEVEL <数値> の仕様は少し特異で、=(同値)ではなく
    ERRORLEVEL≧<数値>
    で判断する仕様のため、複数の数値で判断する場合は、 上記例のように大きな数字から分岐処理を並べておく必要があります。


     上記例では、NCデータ名称の拡張子は(.NC)で、 引数指定では省略することが前提です。また、それぞれの加工結果は、 指定されたNCファイル名称と同じで、 拡張子がDMFになったファイルとして残されます。このあたりの仕様は、 バッチファイルの記述方法により、どうにでも変更できます。 また、上記例のようなコマンドだけでなく、結果によってはDNCコマンドなどに直結させたり、 プリンター出力など、自由にカスタマイズすることも可能です。


    [バッチファイル作成例]
     ここではNCデータの編集用に一般的なバッチファイルの作成例を紹介させていただきます。
    機能:複数のNCデータを結合するバッチファイル
    処理内容:各々のNCデータの%とM30を取り除いて連結し、先頭に%、最後にM30と%を付加する。
    サンプルソース(join.bat)
    set MOJI=%1
    set NCDATA=join.nc
    echo %MOJI% >%NCDATA%
    :STARTJOIN
    IF "%2" =="" GOTO ENDJOIN
    TYPE %2 | FIND /V "%MOJI%" | FIND /V "M30" >> %NCDATA%
    SHIFT
    GOTO STARTJOIN
    :ENDJOIN
    echo M30 >>%NCDATA%
    echo %MOJI% >>%NCDATA%

     実行形式は、
    join 開始終了コード NC名1 NC名2 NC名3 ,,, [Enter]

    ※開始終了コードは % です。 バッチファイル内では%が使えないので外部引数からの指定にしています。
    ※NCデータはいくつでも指定できます。

    例えば、 join % nc1.nc nc2.nc nc3.nc nc4.nc nc5.nc [Enter]
    のように実行すると、実行したフォルダ内にjoin.ncが作成されます。
     このjoin.ncを使用して引き続きTRYCUT2000/3000でシミュレーションさせる場合には、 最後の行に
    C:\TRYCUT2000\TRYCUT /x4 join.nc
    などのような行を追加してみて下さい。



     なお、さらに高度なバッチファイルを作りたいという方は、 「コマンドプロンプトを使ってみよう」などを読まれるとか、 ベクターのダウンロード・サイトなどに掲載されている、 Windows上で動作するUNIXライクツール(フリーソフト)や各種UNIX系コマンドツール(grep,sed,awk etc...)を併用されると、 より強力なものが作りやすくなると思います。
     ただし、これらは対応されていないコマンドもありますので、 もっと積極的にUNIXコマンドを利用したいという場合は以下のCygwinの利用もお薦めします。

     TRYCUT2000/3000を利用する上で「こんなことをしたいけど、どうすれば?」というようなものがありましたらこちらまで、 ご質問下さい。答えられる範囲内で回答させていただきます。


    [UNIXのシェルを利用したい方に朗報]

    ★Cygwin

     バッチファイル作成者で、もしUNIXやLinuxの強力なシェル環境を経験された方であれば、 バッチファイルをベースに考えるのではなく、 UNIX(Linux含む)のシェルのような環境で実行してみたいという願望が沸いてくるかもしれません。 また、そうでなくともバッチファイル内で記述できるコマンドに不足を感じる方であれば、 Cygwinを利用するのも得策です。 フリーソフトでGPLを理解した上で利用する必要がありますが、 保証がないとは言っても実績は十分で大変優れものです。

     CygwinはWindows上でファイルシステムに変更を加えることなくUNIX環境を実現してくれます。 シェルを利用する場合も基本的にはバッチファイルと同じようにコマンド列を記述して実行するのですが、 UNIXコマンドは数段ハイレベル(条件分岐、ループ、文字列検索、ソート、置換など)な処理が行えます。

    ※参考までに、Cygwin関連の以下2サイトを紹介しておきます。
    Cygwin を使う
    Cygwin JE(Cygwinの日本語化)

    ★Windows Services for UNIX

     もうひとつの手段として2004年にマイクロソフトが無償公開したWindows上で動作する Windows Services for UNIX (SFU) 3.5があります。 インストール後、スタートメニューにCシェル環境が登録されます。 この環境も使いこなせばCygwin同様の能力を発揮するはずです。 また日本語版も正式に公開されていますのでより使いやすくなっているかもしれません。 ただしインストールできるのは32bit Windows上だけのようです。 64bit Windowsへの対応がどうなるかはわかりません。


    トップページへ