バッチメモ(制作途中)
前置き
初心者がバッチを書いたので、調べた内容に対するメモを置いておきます。
test.batファイルを一部を順にコードを挿入していきます。
その下に説明を入れます。
(コマンド名) /? で説明読むの大切だけど、全部それじゃ効率悪いよね。
存在確認+ファイルコピー用スクリプト
バッチ先頭の定型文は大切。
@echo off
rem ------------------
rem 存在確認+ファイルコピー用スクリプト
rem ------------------
@
echo off
echo off は命令時に次の行から画面出力を勝手にさせない。(ただしechoはきちんと出力される)
@はその行のみ画面出力を勝手にさせない。
二つを足して、バッチファイル全体で、命令時の画面出力をoffにしている。
(アットマークを特殊文字(?)ただの記号にはどうすれば。。。)
(@など特殊文字について、コメントで詳しく解説を頂きました。)
rem
先頭のremでその行をコメントアウトさせる。
::でも同じことが可能。
rem -----エラーフラグを生成-------------
set /a flag=0
エラーフラグ
/a は変数が数値であることを示す。
=の前後に空白を挿入することは許されていない。
(正しくは思い通りにならない。あなたが偏屈でない限りは。)
バッチでは、変数を宣言して代入をしないのは、出来なそう。
エラー判定用のフラグは大切。
rem -----宛先のフォルダが存在するのかをチェック----
set dirpath=<<<<dirctory path>>>>
if exist %dirpath%(
echo exist
) else (
echo not_exist
exit /b 1
)
存在しないディレクトリのパスを代入しただけでは当然エラーにならない。(ただの文字列なので。ちなみに、バッチでは文字列をダブルクォーテーションで囲む必要はない。)
そこで、if文で存在を確認している。
%変数%
すでに定義した変数を使うときは%で囲む必要がある。
ディレクトリの存在を確認
ディレクトリのパスをexistの引数にすることで、存在する/しないで真偽を得られる。
exit /b 1
exitでそのbatファイル終了させることが出来る。
/b は、このbatファイルの呼び出し元まで閉じるかどうかを決める。exit /bの場合は、閉じない。
最後の 1 はエラーフラグ用。(先ほどのエラーフラグの出番はありません。ありません。)
きっと、呼び出し元に対して、エラーが起きたかどうかを判定する
注:%errorlevel%という変数がある。
直前の命令がエラーだった場合、そのエラーレベルをこの変数に自動で代入する。
(echoはテスト用)
rem ----- ファイルをコピー -----
for /f %%i in (aprpath.ini) do (
xcopy %%i %storedpath%
)
exit 0
for文
/fパラメータで、ファイルの各行を読み取ることができる。
このaprpath.iniの各行を%%iに代入してfor文を回している。便利!
ちなみに、aprpath.iniには、ファイル名がフルパス(ワイルドカードを含む)で各行に書かれている。そのフルパスからファイル名を読み取ってstoredpathにコピーをしている。
あとがき
Powershellがオープンソースになったらしいですよ?
参考url
Markdown記法 チートシート
Qiitaでシンタックスハイライト可能な言語一覧 | Syntax Highlighting: List of Supported Language at Qiita
.bat(バッチファイル)のifコマンド解説。
.bat(バッチファイル)のforコマンド解説。