Translate

2014年6月19日木曜日

【コマンドプロンプト】ファイル出力

前回、コマンドプロンプトについて書きましたが

まだまだ初心者ですので、新しく
新しいことがあったので今回もコマンドについて書いていきます。

プログラムを作って、走らせるトライandエラーがし終わり
実行する際に、内容にechoが入ったり、
外部のソフトの仕様でコメントが表示されたりしていました。

これを見えないようにするかつ、内容についても残すために

ファイル出力を行います。

実行するプログラムの後ろに

実行ファイル >  出力ファイル名 

これにより、実行された時に表示される内容を出力することができます。


さらに、効果として、処理速度が格段に早くなります。
表記する処理自体がかなりの負担になっているんですね。

プログラミング外でのエラーやメッセージ(ファイルが見つかりません、など)は
コマンドプロンプトに表示されます。


出力、入力、リダイレクト、、、
まだまだ知らないことがあるのでこれからも勉強して
メモしていきたいと思います。

ではでは

2014年6月5日木曜日

【Windows】初バッチファイル

晴れたら暑くて、雨が降ると一気に気温が下がったりと服の調整が大変ですね。


今日はコマンドプロンプトで作業することがあったのでメモとして残しています。

elastixという医用画像処理用ソフトを使用することがありまして、
このソフトはコマンドプロンプトから処理を行います。
実行ファイルは.batというバッチファイルになります。


MacやLinuxでコマンドの知識は少しあったのですがWindowsではコマンドが多少異なるので使用してきませんでした。
今回、初めてバッチファイルを使用するので色々心配でしたが思っていたよりも処理が単純で
書きやすかったのが印象です。

elastixについては時間があれば、書いていけたらいいなと思いますが
今日はメモなのでelastix以外でのコマンドについて残していきます。


まず 変数  %% or %

画像名やフォルダ名の入力を省略するために変数に代入します。

%%[変数名] 

変数名の前に"%"を付けることで変数として扱われます。
コマンド上では"%"でいいのですが、バッチファイルでは"%%"にするようです。(謎)
以下変数はバッチファイル用"%%"で書いています。


次に for文 for %%[変数] in (リスト) do (コマンド)

for文を使って変数に繰り返し代入をするために使用します。
for文には for の後に "/l" ・・・"スラッシュ+L"を入れることで
リストの部分が ([初期値],[増分値],[終了値])と指定することが出来ます。

for /l %%a in (8,-2,-3) do echo %%a

echoはコマンドプロンプトに表示させる命令で、上のfor文ならば
8、6、4、2、0、-2とコマンドプロント上に代入された文字が一行ずつ表示されます。

最後に テキストファイル読み込み
これが大変だと思っていましたが、なんと!for文で解決しました。
for の後ろに "/f" と入力することでファイルリストを変数に入力してくれました。(なんていい子)



for /f "[オプション]" %%a in (ファイルリスト) do ()

ファイルリストに書かれた一単語目ファイル名を入力すれば変数に代入されます。

"aaa bbb"ならば"aaa"のみ代入されます。
"aaa,bbb"ならば"aaa,bbb"と読み込まれます。


オプションは読み込み方法を変更します。
一行すべて読み込む場合には "delims="と入力します(ダブルコーテーション含む)
もしCSV形式などカンマで区切られているものを一つずつ読み込む場合には"delims=,"
書けば
"aaa,bbb" は
"aaa"
"bbb"
と別々に読み込まれます。



おまけ
実際には上のやり方で完成するはずだったのですが、実行時にポカをしてしまい。
フォルダ名を間違えて作成してしまいました。(for文で大量作成)

よって、フォルダ名を変更するコマンドを使用したので残しておきたいと思います。

move [現存フォルダ名] [新しいフォルダ名]

"move"を使うことでフォルダの中に含まれているファイルはそのままでファイル名のみ変更出来ました。(ほっ)


気まぐれ更新になってますが、勉強したことをこれからも残していきたいと思います。

ではでは


2014/1110 追記

for文で変数がうまく展開されないことがあったので追記
遅延環境変数なるものが存在しそれをfor文外で有効にしてから変数を感嘆符(!)で囲んでます。
 setlocal enabledelayedexpansion

よく理解していないので記事には出来ませんが
ぐぐってたら上のコマンドが複数のサイトで紹介されていました。

Yahoo知恵袋のベストアンサーを参考にさせて頂きました。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1092589030