今回は、FOR 変数参照の置換(%~) の可能性を探る旅と称して、「DOS for文のツアー」を準備してみました。
旅準備:
test用のフォルダとファイルを準備します。 手作りでもいいですが、せっかくなので下の8行をコピーしてDOS窓にペーストして実行してみます。if not exist C:\temp\for (mkdir C:\temp\for) fsutil file createnew C:\temp\for\0kb.txt 0 fsutil file createnew C:\temp\for\1kb.txt 1024 fsutil file createnew C:\temp\for\10kb.txt 1024 if not exist C:\temp\for\sub (mkdir C:\temp\for\sub) fsutil file createnew C:\temp\for\sub\0kb.txt 0 fsutil file createnew C:\temp\for\sub\5kb.txt 5120 fsutil file createnew C:\temp\for\sub\50kb.txt 51200 |
DOS窓からtreeで表示すると下記のような構成のフォルダになります
> tree /F /A C:\temp\for C:\TEMP\FOR | 0kb.txt | 10kb.txt | 1kb.txt | \---sub 0kb.txt 50kb.txt 5kb.txt |
test用のフォルダの準備ができたら、そのDOSをそのまま使っても結構なのでecho offします(for文の標準出力がうっとうしいので)
echo off |
そして以下のfor文を実行してみましょう
for /F "delims=" %I in ('dir /S /B "C:\temp\for"') do (echo %I) |
こんな結果が出たら旅の準備は完了です
C:\temp\for\0kb.txt C:\temp\for\10kb.txt C:\temp\for\1kb.txt C:\temp\for\sub C:\temp\for\sub\0kb.txt C:\temp\for\sub\50kb.txt C:\temp\for\sub\5kb.txt |
いざ旅へ!:
さて、ここから旅の始まりです。「FOR 変数参照の置換オプション」を試してみましょう
はてさて、それぞれどんな結果になるでしょうか?
for /F "delims=" %I in ('dir /S /B "C:\temp\for"') do (echo %~fI) for /F "delims=" %I in ('dir /S /B "C:\temp\for"') do (echo %~sI) for /F "delims=" %I in ('dir /S /B "C:\temp\for"') do (echo %~aI) for /F "delims=" %I in ('dir /S /B "C:\temp\for"') do (echo %~tI) for /F "delims=" %I in ('dir /S /B "C:\temp\for"') do (echo %~zI) for /F "delims=" %I in ('dir /S /B "C:\temp\for"') do (echo %~ftzaI) |
更なる旅へ!:
さて(うまく結果が出たとして)、今回の「DOS for文ツアー」はここで終わりです
これまでを通して「FOR 変数参照の置換オプション」というツールを手に入れられたのではないでしょうか? (ついでにfsutilやtreeなどにも触れました。)
個人的には ~z のファイルのサイズを返すオプションが目玉だと思います。空ファイル(0kb)を判別する必要がある時などに重宝します。
そして、ここからが旅の本番です、行く先々で待ち受けているであろう「DOS故の痒いところ」は、もしかすると「FOR 変数参照の置換オプション」で、意外と簡単に乗り越えられるかもしれませんね
※今回の例ではFOR変数に I を使用しています、またコマンドラインで実行しているので 変数I に付ける % は一個です、.batで実行するような時は %%I としてください。 またFOR変数は I である必要はありません、aを使いたかったら%aでいいですし、その場合は %~za という感じで使ってください
最後に「FOR 変数参照の置換オプション」をリストしておきます。for /? からの抜粋です。
=========================================================== %~I - すべての引用句 (") を削除して、%I を展開します。 %~fI - %I を完全修飾パス名に展開します。 %~dI - %I をドライブ文字だけに展開します。 %~pI - %I をパス名だけに展開します。 %~nI - %I をファイル名だけに展開します。 %~xI - %I をファイル拡張子だけに展開します。 %~sI - 展開されたパスは短い名前だけを含みます。 %~aI - %I をファイルの属性に展開します。 %~tI k- %I ファイルの日付/時刻に展開します。 %~zI - %I ファイルのサイズに展開します。 %~$PATH:I - PATH 環境変数に指定されているディレクトリを 検索し、最初に見つかった完全修飾名に %I を 展開します。 環境変数名が定義されていない場合、または検索 してもファイルが見つからなかった場合は、この 修飾子を指定すると空の文字列に展開されます。 修飾子を組み合わせて、複合結果を得ることもできます: %~dpI - %I をドライブ文字とパスだけに展開します。 %~nxI - %I をファイル名と拡張子だけに展開します。 %~fsI - %I を完全なパスと短い名前だけに展開します。 %~dp$PATH:I - PATH 環境変数に指定されているディレクトリを 検索して %I を探し、最初に見つかったファイル のドライブ文字とパスだけに展開します。 %~ftzaI - %I を DIR コマンドの出力行のように展開します。 =========================================================== |
0 件のコメント:
コメントを投稿