LoginSignup
1

More than 5 years have passed since last update.

バッチでファイルの存在確認+α(メモ)

Last updated at Posted at 2016-08-28

バッチメモ(制作途中)

前置き

初心者がバッチを書いたので、調べた内容に対するメモを置いておきます。
test.batファイルを一部を順にコードを挿入していきます。
その下に説明を入れます。
(コマンド名) /? で説明読むの大切だけど、全部それじゃ効率悪いよね。

存在確認+ファイルコピー用スクリプト

バッチ先頭の定型文は大切。

test.bat
@echo off

rem ------------------
rem 存在確認+ファイルコピー用スクリプト
rem ------------------

@echo off

echo off は命令時に次の行から画面出力を勝手にさせない。(ただしechoはきちんと出力される)
@はその行のみ画面出力を勝手にさせない。
二つを足して、バッチファイル全体で、命令時の画面出力をoffにしている。
(アットマークを特殊文字(?)ただの記号にはどうすれば。。。)
(@など特殊文字について、コメントで詳しく解説を頂きました。)

rem

先頭のremでその行をコメントアウトさせる。
::でも同じことが可能。

test.bat
rem -----エラーフラグを生成-------------

set /a flag=0

エラーフラグ

/a は変数が数値であることを示す。
=の前後に空白を挿入することは許されていない。
(正しくは思い通りにならない。あなたが偏屈でない限りは。)

バッチでは、変数を宣言して代入をしないのは、出来なそう。

エラー判定用のフラグは大切。

test.bat
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はテスト用)

test.bat
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コマンド解説。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1