treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

バッチファイル内で共有フォルダ有無から処理を分岐する

VBScriptの廃止がアナウンスされてから、ちょっとづつ進めている更改作業です。
<VBScriptで共有フォルダ接続有無で処理の分岐をしてみる - treedown’s Report>で作成したVBScriptをバッチファイルへ置き換えるための準備です。

if exist~を使う

以前、VBScriptを使って処理を実行する必要があったので、共有フォルダ接続有無で処理の分岐をやってみて上手くいっていました。今回は、改めてバッチファイルで同じことができることを確認してみました。

ローカルのフォルダやファイルの存在を確認する際に使っている「if exist~」を使って、共有フォルダのアクセス有無の判定をやってみました。

書式は

if exist %条件% %実行するコマンド%

になります。条件を満たした時に「%実行するコマンド%」に記載したコマンドが実行されます。

バッチファイルで確認

テスト用のバッチファイルで動作を確認してみます。

--------------------------------------------------------------

@echo off
set CHKFLDRPATH=\\FileSVR\ShareF

rem フォルダのアクセス可否を確認
if exist "%CHKFLDRPATH%" (
        rem フォルダアクセス可能な時の処理
        echo フォルダにアクセス可能です。
        echo 確認フォルダは "%CHKFLDRPATH%" です。
        ) else (
        rem フォルダが存在しない場合の処理
        echo フォルダにはアクセスできません
        echo 確認フォルダ"%CHKFLDRPATH%"へアクセスできません。
        )

echo 処理を終了します。
pause

:end
set CHKFLDRPATH=

--------------------------------------------------------------

これを実行すると、<\\FileSVR\ShareF>にアクセスできるかどうかで画面に表示されるメッセージが変化します。

if exist行で共有フォルダ存在有無を確認、その次の行からは"条件に合致した"="フォルダが存在する時"の処理を記述していきます。

else行を挟んで、"条件に合致しない"="フォルダが発見できなかった時"の処理を記述していきます。else行以下「)」までの処理は"条件に合致した"場合実行されません。

最後に完了メッセージ「処理を終了します。」を表示して(変数をクリアして)終了しています。

実行時の画面表示

共有フォルダにアクセス可能な場合、「echo フォルダにアクセス可能です。」「echo 確認フォルダは "%CHKFLDRPATH%" です。」の2行が実行されます。

共有フォルダにアクセス不可能な場合「echo フォルダにはアクセスできません」「echo 確認フォルダ"%CHKFLDRPATH%"へアクセスできません。」の2行が実行されます。

試しにオフラインにして実行してみたところ、

このように、アクセス不可の場合のメッセージに切り替わってくれました。

どちらの場合でも「echo 処理を終了します。」「pause」は実行されるため、処理の完了後にはキー入力が要求されます。

別の記述で同じ処理

前述のバッチファイルとは別の記載で同じ処理をやってみます。

--------------------------------------------------------------

@echo off
set CHKFLDRPATH=\\FileSVR\ShareF

rem フォルダのアクセス可否を確認
if not exist "%CHKFLDRPATH%"  goto NotFolderPath
        rem フォルダアクセス可能な時の処理
        echo フォルダにアクセス可能です。
        echo 確認フォルダは "%CHKFLDRPATH%" です。
goto end

:NotFolderPath
        rem フォルダが存在しない場合の処理
        echo フォルダにはアクセスできません
        echo 確認フォルダ"%CHKFLDRPATH%"へアクセスできません。

:end
echo .
echo 処理を終了します。
pause

set CHKFLDRPATH=

--------------------------------------------------------------

if exist行は元々「if exist %条件% %実行するコマンド%」という書式です。
また、「if not exist」と記載すると、%条件%に合致しない場合、に%実行するコマンド%記載のコマンドを実行させることができます。

このため、「if not exist」行でフォルダ有無を判定し、フォルダが見つからない(Not %CHKFLDRPATH%の場合)に「goto NotFolderPath」でフォルダが存在しない処理にジャンプするようにしてみました。

フォルダが存在する場合には、「if not exist "%CHKFLDRPATH%"」直後のgotoは実行されず、次の行から処理が継続します。
このため、フォルダが存在する時の処理、「echo フォルダにアクセス可能です。」「echo 確認フォルダは "%CHKFLDRPATH%" です。」の2行を記載したあと、「goto end」で最終行にジャンプしています。

バッチ連続実行用のVBScriptに置き換えたい

テストなので簡素なバッチファイルですが、VBScriptで自動実行していた<VBSを使って画面非表示でバッチファイルを連続実行してみる - treedown’s Report>の内容を置き換えるために必要な処理としてやってみました。

あとはCALLでバッチの連続実行ができれば置き換えに向けて前進できそうです。テスト環境を用意するのが時間かかるのでボチボチやっていかないといけません。