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