2010年6月11日金曜日

バッチファイルを作る方法 - Windowsのコマンドプロンプト(bat,cmd)

Windowsコマンド。プログラム実行関連
コマンドプロンプト画面でコマンドを実行する
○Windows XP
お気に入りのコマンドを、毎回打つのは大変です。
そのような時は、バッチファイル。1度作ると、ダブルクリック(もしくはクリック)だけで実行出来ます。

o ファイルの拡張子を、「.bat」もしくは「.cmd」に変更します。
o バッチファイルは、プログラムの一種です。バッチファイルを作る時は、問題が起きないように作ります。


**** 手順
o メモ帳などで、実行したいコマンドを書いて、保存します。
   + 複数行書く事も出来ます。黒い画面に書く時と同じ要領で、コマンドを並べます。
o ファイルの拡張子を、「bat」に変更します。例: go.bat
   + この操作が始めての方は、最初にファイルの拡張子を変更可能にします

o ファイルの内容を編集したい時も、メモ帳などで行います。
   + メモ帳を開いて、編集したいファイルをメモ帳画面にドロップする方法が簡単です。
   + 右クリックからの「送る」メニューにメモ帳を追加しておく方法もあります。


**** メモ
o ファイルの拡張子は、「bat」の他に「cmd」も使用する事が出来ます。
o 出来たファイルは、ダブルクリック(もしくはクリック)で実行する事が出来ます。
o 実行内容を確認したい時は
   + 最後に「pause」コマンドを入れて実行したり(= 最後に止まります)
   + コマンドプロンプト画面にドロップして実行したり
   + 実行結果をファイルに記録したりします。


**** 確認したバージョン
o Windows XP Service Pack 3


==
関連ページ:
    ▼Windowsコマンド。プログラム実行関連▼ABC順
    ▼コマンドを実行する
    ▼コマンドプロンプト画面
    ▼制作メモ
    > 表示結果をファイルに出力する
    実行中のプログラムを止める
    バッチファイルの処理を途中で終わらせる書き方。EXIT と GOTO :EOF
    +
    ファイルやフォルダーのパスを書いて、エラーになる時の確認点
(2011年1月18日追加。拡張子「cmd」も使用可能)

表示結果をファイルに出力する方法 - Windowsのコマンドプロンプト(bat,cmd)

Windowsコマンド。画面表示と印刷関連
Windowsコマンド。プログラム実行関連
コマンドプロンプト画面でコマンドを実行する
○Windows XP
作業を自動実行する時に、表示結果をファイルに保存したくなる事があります。
このような時は、コマンドの後ろに出力先を指定する方法が簡単です。


**** コマンドプロンプト画面表示の仕組みについて
o プログラムからコマンドプロンプト画面に書き込む方法は、2通りあります。
    + 標準出力 (= 普段使うのはこちら)
    + 標準エラー出力 (= 主にエラーメッセージ)
o ですので、画面表示結果をファイルに保存する時は、ファイルに保存したいものを選びます。


**** 手順
例えば、go.batという名前のバッチファイルを作って、実行するとします。

** コマンドの出力内容のうち、標準出力だけをファイルに記録する方法
o 一番良くお世話になる書き方です。
    + データを加工している時、エラーメッセージまで入れたくないですから。
----------------
call go.bat > log.txt
----------------
o 標準出力(= 主に普通の表示内容です)を、ファイルに保存します。
o 標準エラー出力(= 主にエラーメッセージです)は、画面に表示します。

** コマンドの出力内容のうち、標準エラー出力だけをファイルに記録する方法
o エラーメッセージだけ集めたい時の書き方です(例外あり)。
----------------
call go.bat 2> log.txt
----------------
o 標準出力(= 主に普通の表示内容です)は、画面に表示します。
o 標準出力は 1番。 標準エラー出力は 2番です。左の番号を省略すると、1番を指定した事になります。

** コマンドの出力内容を、全部ファイルに出力する方法
o 画面には表示しません。
----------------
call go.bat > log.txt 2>&1
----------------
o 2>&1を、最後に指定するのがポイントです。

** コマンドの出力内容を、ファイルと画面の両方に出力する方法
----------------
call go.bat > log.txt 2>&1
type log.txt
----------------
o 画面に表示されるのは、コマンドが終わってからです。


**** メモ
o ファイルに出力する時は、コマンドが途中で質問する事が無いように、コマンドを書きます。
o もしくは、質問されそうな所は、ファイルに出力しないようにします。

o プログラムの中には、作法を無視するものもあります。その場合は、適切に対応します。
    + 標準出力にエラーメッセージを書き込むプログラム
    + 標準エラー出力にデータを書き込むプログラム
    + どこか別の場所にエラーメッセージを書き込むプログラム


**** 確認したバージョン
o Windows XP Service Pack 3


==
関連ページ:
    ▼Windowsコマンド。画面表示と印刷関連▼ABC順
    ▼Windowsコマンド。プログラム実行関連▼ABC順
    ▼コマンドを実行する
    ▼コマンドプロンプト画面
    ▼制作メモ
    > ECHOコマンドで空行を出力する
    バッチファイルに書いたコマンド内容を実行画面に表示させない
    > 実行中のプログラムを止める
    バッチファイルの処理を途中で終わらせる書き方。EXIT と GOTO :EOF
    +
    バッチファイルを作る
(2011年5月11日訂正。用語を標準エラー出力へ)
(2011年1月26日追加。出力の種類)

systime = 現在の時刻値(= 基準時刻からの経過秒数)を調べる(Gawk, mawk32専用) - AWK

AWKの時刻取得関数と関連機能
○Gawk on Windows ○Gawk ○mawk32 ×Mawk ×awk
現在の時刻値(= Unix time = 基準時刻からの経過秒数)を調べます。

o 時刻文字列に変換したい時は、「strftime = 時刻を文字列に変換する


**** 書式
--------
systime()
--------

o この関数は、Gawkとmawk32の拡張機能です。
o 戻り値 -- 基準時刻からの経過秒数(= Unix time)
   + 通常、UTC(= 協定世界時)で1970年1月1日の0時からの経過秒数。但し、閏秒は数えません。
   + 通常、と書いたのは、AWKの仕様では無いからです。他の数え方をするシステムもあるかもしれません。


**** 使用例
--------
BEGIN {
print systime(); # systimeは整数で返します。
print strftime("%Y/%m/%d %H:%M:%S", systime()); # 文字列にしたい時
}
--------

o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。


**** 機能
o 現在の時刻値(= Unix time = 基準時刻からの経過秒数)を調べます。
   + ▽Gawkの公式説明(= 英語です)によると、「POSIXシステムの場合(= 通常)、UTC(= 協定世界時)で1970年1月1日の0時からの経過秒数です。但し、閏秒は数えません。他のシステムでは違うかもしれません」となっていました。
   + ▽Windowsシステムでも同様です。閏秒は数えません。
   + 但し、UNIXで閏秒を有効にしている場合、経過秒数の計算方法について確認する必要があります。
o 戻り値は、整数です。読み易い文字列に変換したい時には、strftimeを使います。
o この関数をサポートしていない処理系があります。


**** メモ
o srandを2回呼ぶ事でも、同じ値を取得する事が出来ます。(= 多分、非公式動作)
o この関数は、AWKのコンパイル環境によっては、2038年問題を抱えています。
   + 2038年1月19日の途中で、正確に時刻を示さなくなる問題です。
   + それまでに、AWKプログラムを、2038年問題の対策版に入れ替える必要があります。
o 過去の日付を計算で求める時は、閏年の実装についても確認します。
   + Web検索した限りでは、(過去や未来の)閏年の計算ミスをしているシステムが、毎回発覚していました。


**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6
o mawk MBCS (32bit版) 1.3.3
o Mawk for Windows 1.3.3 -- 非対応
o original = the one true awk(updated May 1, 2007) -- 非対応


==
関連ページ:
    ▼AWKの時刻取得関数と関連機能▼ABC順
    ▼AWKプログラムを書く▼ABC順
    ▼AWK
    ▼制作メモ
    > mktime = 特定日時の時刻値(= 基準時刻からの経過秒数)を調べる(Gawk専用)
    srand = 乱数の種を設定する
    strftime = 時刻を文字列に変換する(Gawk, mawk32専用)
    +
    ツール。systime関数とsrand関数の戻り値予想(Unix time)
(2010年6月23日追加。戻り値の内容はAWKの仕様外)