MicrosoftがリリースしているOS「Windows 7」は、GUI(グラフィカルユーザーインターフェース)を主なUI(ユーザーインターフェース)として採用していますが、CUI(コマンドラインユーザーインターフェース、またはキャラクタユーザーインターフェース)である「コマンドプロンプト」も用意しています。本稿では、このコマンドプロンプト上で動作するコマンドや、特定の作業を自動化するバッチファイルを使用し、ライフハック的な活用方法を紹介していきます。今回はChangeLog風のメモ作成バッチファイルを作ってみましょう。

ChangeLog風のメモ作成バッチファイルを作る

UNIX文化に触れている方にはお馴染みですが、ソフトウェア開発者なら一度は「ChangeLog(チェンジログ)」を作成したことがあるでしょう。ChangeLogとは、開発したソフトウェアや単独のソースコード、もしくは開発プロジェクトの変更履歴を記述ためのテキストフォーマットです。

UNIXで開発を行なっているプログラマやコンピュータ技術者に愛用者が多いテキストエディタ「Emacs(イーマックス)」では、簡単に新しいログ(日付け、名前、および電子メールアドレス)を追加するchange-log-modeが用意されていることからも、開発者における普遍性の高さを理解できることでしょう(図01)。

図01 Windows用Emacsでもchange-log-modeは使用可能です

一昔前はChangeLogにおける利便性の高さから、メモ帳代わりや日記ツールとして使っている方も少なくありませんでした。前回は「findstr」コマンドを使ってTODOの作成および表示を行ないましたが今回は、この作成部分をChangeLog風に置き換えるバッチファイルを作成してみましょう。ただし、ChangeLogの書式に関しては様々な意見がありますので、今回は日付け、名前、および電子メールアドレスを自動追加する部分に注力します。

リスト01

 @echo off
    setlocal
    set CLFile=%USERPROFILE%\Documents\ChangeLog.txt
    set TmpFile1=%TEMP%\_input.txt
    set UserName=Y.Akutsu
    set MailAddress=xxx@cactus.ne.jp

    if not exist %CLFile% (
        echo off > %CLFile%
        goto Action_Make
    )

 :Action_Make
    echo %date%%time% %UserName% ^<%MailAddress%^> > %TmpFile1%
    echo    * >> %TmpFile1%
    echo.>> %TmpFile1%

    copy /b %TmpFile1% + %CLFile% %TmpFile1% >>%TEMP%\NULL
    move %TmpFile1% %CLFile% >>%TEMP%\NULL
    goto end

 :end
    if exist %TEMP%\NULL del /f %TEMP%\NULL
    endlocal

まずはリスト01をご覧ください。序盤に設定しているローカル環境変数「UserName」および「MailAddress」は、文字どおり自身の名前と電子メールアドレスを意味します。お好みに応じて変更してください。最初にローカル環境変数「CLFile」で設定したChangeLogファイルの存在をチェックしてから、実際のアクションに移ります。

ラベル「Action_Make」では、前述のローカル環境変数や環境変数「date」「time」を用いて、ログを出力しています。ここでは電子メールアドレスを囲む記号として「<>」を使用していますが、各記号は出力結果をファイルやほかのコマンドに渡す"リダイレクト"を意味するため、そのまま記述するとエラーになってしまい、バッチファイルが動作しません。これを避けるため、特殊文字の前に「^(ハット記号)」を用いて単独の文字であることを明示化しています。

ここでリダイレクトに関する説明も行ないましょう。「>」の先がファイルの場合、出力先の内容にかかわらず新規作成を実行します。その一方で「>>」と記述した場合、ファイル末尾に追加されます。ChangeLogは新しいログがテキスト冒頭に存在するため、ただ追記するだけでは面白くありません。そこで、ログの出力先を一時ファイルとします。続いて一時ファイルを既存のChangeLogと結合した後に、一時ファイルをChangeLogファイルにリネームするロジックを採用しました(図02~05)。

図02 [Win]+[R]キーを押し、ファイル名を指定して実行のテキストボックスに「notepad」と入力して<OK>ボタンをクリックします

図03 メモ帳が起動したらリスト01の内容を入力し、[Ctrl]+[S]キーを押します

図04 ダイアログが起動したら、保存先をデスクトップに変更し、ファイル名のテキストボックスに「"Test01.bat"」と入力して<保存>ボタンをクリックします

図05 [Win]+[R]キーを押し、ファイル名を指定して実行のテキストボックスに「cmd」と入力して<OK>ボタンをクリックします

バッチファイルを実行しますと、ドキュメントフォルダーに「ChangeLog.txt」が自動生成され、実行時の日時を使用したログが作成されます。任意のテキストエディタを使用し、メモを記述してください(図06~07)。

図06 コマンドプロンプトが起動したら、「Test01.bat」と入力して[Enter]キーを押します。数秒ほど時間を空けてから再度同じ手順でバッチファイルを実行してください

図07 ドキュメントフォルダーにある「ChangeLog.txt」をメモ帳などで開きますと、ご覧のようにChangeLog風のログがバッチファイル実行時の情報として自動生成されます