2011年3月8日火曜日

%変数の使い方 - Windowsのコマンドプロンプト(bat,cmd)

Windowsコマンド。制御文と環境変数
○Windows XP
%1などの引数や、FORコマンドで使う%変数は、呼び出された先だけで、一時的に使う事が出来ます。
これらの変数を使う時は、ファイル操作に関する便利な書式を利用する事が出来ます。

o 環境変数と%変数は、得意分野が異なります。
    + 環境変数を使うと、文字の置換や一部分の取り出しが簡単に出来ます。
    + %変数を使うと、ファイルのサイズや拡張子などを、簡単に取得する事が出来ます。
o なお、%変数 の正しい呼び方は「変数」です。
    + 環境変数と区別する為に、このメモでは呼び方を変えてみました。


**** 書式
--------
画面に直接書く時や引数(= %1など)は
%[[~]オプション]変数名
バッチファイルに書くFORの変数は
%%[[~]オプション]変数名
--------

o この時の変数名は、大文字小文字を区別「します」。
o % = 変数名の先頭に付けます。
    + バッチファイルに書くFORの変数は、%% と書きます。
o ~ = チルダです。書式オプションを指定する時に使います。
    + 前後に空白を入れません。
    + 「Shift」キーを押しながら、「0」キーの2つ右のへの字のキーを押します。
o オプション = 書式オプションです。複数指定する事も出来ます。
    + 前後に空白を入れません。
    + 使用出来る書式オプションは、下記の通りです。
o 変数名 = 1文字です。大文字小文字を区別「します」。

%変数の書式オプションの概要
記号意味結果例
オプションの意味
~ (チルダ)「"」を除去します(%の直後に付けます)
dドライブ名C:
p途中のパス部分\ミクさん\
nファイル名部分強いネギの作り方
x拡張子.txt
fフルパスC:\ミクさん\強いネギの作り方.txt
$環境変数名:フルパス(環境変数に書いたパスも検索します)
s8.3形式フルパスC:\ミクさん\強いネ~1.TXT
aファイルの属性-rahsc---
tファイルの最終更新日時2011/03/09 20:39
zファイルサイズ393
組み合わせ例
~dp親フォルダー。最後に\C:\ミクさん\
~nx拡張子付きのファイル名強いネギの作り方.txt


**** 書式オプションについて
o 書式オプションは複数並べる事も出来ます。
o 複数並べる方法については、後で記します。

--------
%変数名
--------

o %a (オプション無し)= 変数 %a の、そのままの値です。

** ファイル名の取り出しに便利なオプション(~fdpnxs$)
--------
%~変数名
--------

o %~a = 文字列 %a から「"」(= 二重引用符)を削除した文字列です。
    + 文字列の途中にある「"」も除去します。
    + 以下、%~ から始まる名前は、全てこの機能を含みます。

--------
%~d変数名
--------

o d = ドライブ文字部分です。(「C:」)
    + %~da = 文字列 %a をファイルとみなして、ドライブ文字部分を取得します。
    + ファイルの存在確認はしません。
    + パス部分を書いていない時、カレントディレクトリ上にファイルがあるものと解釈します。

--------
%~p変数名
--------

o p = ドライブ文字部分を除いたパス部分です。(「\ミクさん\」)
    + %~pa = 文字列 %a をファイルとみなして、パス部分を取得します。
    + ファイルの存在確認はしません。
    + パス部分を書いていない時、カレントディレクトリ上にファイルがあるものと解釈します。

--------
%~n変数名
--------

o n = 拡張子を除いたファイル名部分です。(「強いネギの作り方」)
    + %~na = 文字列 %a をファイルとみなして、ファイル名部分を取得します。
    + ファイルの存在確認はしません。

--------
%~x変数名
--------

o x = ファイル拡張子です。(「.txt」)
    + %~xa = 文字列 %a をファイルとみなして、拡張子を取得します。
    + ファイルの存在確認はしません。

--------
%~f変数名
--------

o f = フルパスです。(「C:\ミクさん\強いネギの作り方.txt」)
    + %~fa = 文字列 %a をファイルとみなして、フルパスを取得します。
    + ファイルの存在確認はしません。
    + パス部分を書いていない時、カレントディレクトリ上にファイルがあるものと解釈します。

--------
%~$環境変数名:変数名
--------

o $と: = フルパスです。この時、環境変数(= セミコロン区切り)からパスを検索します。
    + %~$PATH:a = 文字列 %a をファイルとみなして、フルパスを取得します。
    + 実行ファイルの検索動作とは異なり、カレントディレクトリは検索しません。
    + 次の条件を全て満たす時、指定した環境変数に無いパスも検索します。
        + 存在するファイルをフルパスで指定する
        + かつ、環境変数に、何か値が入っている
    + 指定した環境変数が定義されていない時は、常に空 = 0文字です。

--------
%~s変数名
--------

o s = 8.3形式フルパス = DOS時代からある短いファイル名です。(「C:\ミクさん\強いネ~1.TXT」)
    + %~sa = 文字列 %a をファイルとみなして、8.3形式フルパスを取得します。
    + ファイルが存在しない時は、ファイル名を短くしません。
    + パス部分を書いていない時、カレントディレクトリ上にファイルがあるものと解釈します。

** ファイル情報の取り出し用オプション(~atz)
--------
%~a変数名
--------

o a = ファイルの属性です。(「-rahsc---」)
    + %~aa = 文字列 %a をファイルとみなして、ファイルの属性を取得します。
    + 読み取り専用属性などの有無を、文字列の形で確認出来ます。
        + r = 読み取り専用属性
        + a = アーカイブ属性
        + h = 隠しファイル属性
        + s = システムファイル属性
        + c = 圧縮済み
        + 表示領域は9個分ありますので、他にも表示出来る属性があるかもしれません。
    + ファイルが存在しない時、空 = 0文字です。
    + 後ろに他の属性が並ぶ時、間に空白文字が1つ入ります。
    + ATTRIB コマンドよりも、取得出来るファイル属性が多いです。。。

--------
%~t変数名
--------

o t = ファイルの最終更新日時です。(「2011/03/09 20:39」)
    + %~ta = 文字列 %a をファイルとみなして、ファイルの最終更新日時を取得します。
    + ファイルが存在しない時、空 = 0文字です。
    + 後ろに他の属性が並ぶ時、間に空白文字が1つ入ります。

--------
%~z変数名
--------

o z = ファイルサイズです。(「393」)
    + %~za = 文字列 %a をファイルとみなして、ファイルサイズを取得します。
    + 少なくとも、4GB余りのバイト数(5,000,003,584バイト)は、正しく取得する事が出来ました。
    + 後ろに他の属性が並ぶ時、間に空白文字が1つ入ります。
    + ファイルが存在しない時、空 = 0文字です。

** 書式オプションを複数並べる方法
o 書式オプションは、複数並べる事も出来ます。
o 複数並べた時の表示順は決まっています。
    + 表示順は、「属性、日付、ファイルサイズ、パス」です。
    + 短いファイル名を指定した時は、普通のファイル名は省略します。
    + フルパスとパスの要素を両方指定した時は、フルパスのみ表示します。
o 同じ書式を複数指定すると、一つ以外は無視します。

** 書式オプションの、良く使う組み合わせ
o %~nxa = 拡張子付きのファイル名です。
o %~dpa = ファイル %a の親フォルダーです。最後は \ で終わります。


**** メモ
o 書式オプションを指定すると、「"」が除去されます。
o ファイル名を扱う時は、必要に応じて「"」で括ります。


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


==
関連ページ:
    ▼Windowsコマンド。制御文と環境変数▼ABC順
    ▼Windowsコマンド一覧▼ABC順
    ▼コマンドプロンプト画面
    ▼制作メモ
    > 環境変数の使い方。置換と部分文字列
    環境変数の生存期間について
    SET /A コマンドで数値計算出来る値の範囲(= 上限と下限)
(2011年3月9日変更。説明部分の見直し。%1は%1つ。$環境変数の使用条件を訂正)