treedown’s Report

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

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

PC名を実行可否条件にしたサンプルバッチファイルを作ってみる

PC名を判定して、合致するPC名ならバッチを実行するようにバッチファイルの処理を組んでみる試みです。
今回の記事は判定部分のサンプルバッチファイルとなります。

前準備と考え方

対象とするPC名を予めファイル名などにして置いておきます。

--------------------------------------------------------------
C:\Users\user-1>dir \\FileSVR\ShareF\_Template\TargetPC
 ドライブ \\FileSVR\ShareF のボリューム ラベルは ShareF です
 ボリューム シリアル番号は A1CE-1BA8 です

 \\FileSVR\ShareF\_Template\TargetPC のディレクトリ

2024/07/09  01:21    <DIR>          .
2024/07/09  01:20    <DIR>          ..
2024/07/09  01:20                 0 TestPC01.txt
2024/07/09  01:20                 0 PC名判定する時はここにPC名のファイルを置く.txt
               2 個のファイル                   0 バイト
               2 個のディレクトリ  556,537,520,128 バイトの空き領域

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

ここにあるファイル名がコンピュータ名と合致するならIF文で分岐させて、処理を実行すればいいんじゃないかと考えました。

試しに、findstrで絞ってdirコマンドを実行してみると、以下のように表示されます。

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

C:\Users\user-1>dir \\FileSVR\ShareF\_Template\TargetPC | findstr %COMPUTERNAME%
2024/07/09  01:20                 0 TestPC01.txt

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

バッチを実行する際、「findstr %COMPUTERNAME%」で実行PCのPC名と照合することになるので、この判断コマンドのあとに

--------------------------------------------------------------
if %ERRORLEVEL% == 0 goto match
if %ERRORLEVEL% == 1 goto unmatch
--------------------------------------------------------------

こういう判定を入れれば、PC名と合致しているかどうかは判断可能じゃないかと考えました。

サンプルバッチファイル

PC名を判定させて処理を分岐するサンプルを作ってみました。

※サンプルバッチは<C:\Users\user-1\Works\BAT-TEST\CHK-COMPUTERNAME>に置いています。

--------------------------------------------------------------
サンプル:CHK-PCNAME.bat
--------------------------------------------------------------
@echo off
dir \\FileSVR\ShareF\_Template\TargetPC | findstr %COMPUTERNAME%
if %ERRORLEVEL% == 0 goto matchPC
if %ERRORLEVEL% == 1 goto unmatchPC

:matchPC
echo PC名合致した時の処理をします。
goto end

:unmatchPC
echo PC名が合致しないときの処理を実行します。
goto end

:end
--------------------------------------------------------------

パス<\\FileSVR\ShareF\_Template\TargetPC>に保管されたTestPC01.txtのようなPC名と同じ名前のファイルが存在するかどうかを判定するために、「findstr %COMPUTERNAME%」を条件にして%ERRORLEVEL%を取得します。

環境変数%COMPUTERNAME%と合致するファイル名が存在した場合には、%ERRORLEVEL% = 0となり、「goto matchPC」が動作して「echo PC名合致した時の処理をします。」内の処理が実行されます。

逆にPC名が合致しない(orファイル名が存在しない)場合には、%ERRORLEVEL% = 1となり、「goto unmatchPC」が動作して、「echo PC名が合致しないときの処理を実行します。」内の処理が実行されます。

特定のPCのみ実行させたい場合、matchPCラベル内の処理「echo PC名合致した時の処理をします。」の部分には実施したい処理を記述し、合致しなかった場合のunmatchPCラベル内の処理は何も記述せず=何もせずに終了、とすることになると思います。ログ表記ぐらいはやるかもしれません。

判定条件を変数に入れて画面表示するサンプル

以前に使ったFOR命令を使って、取得した実行条件となるファイル名(を元にしたコンピュータ名)を変数に取り込んで画面に表示してみるサンプルを作ってみました。

--------------------------------------------------------------
サンプル:CHK-PCNAME判定付き.bat
--------------------------------------------------------------
@echo off

set PCNAMtxt=
set PCNAM=

FOR /F "tokens=1" %%i in ('dir /b "\\FileSVR\ShareF\_Template\TargetPC\%COMPUTERNAME%.txt"') do set PCNAMtxt=%%i
FOR /F "delims=. tokens=1,2" %%i in ("%PCNAMtxt%") DO (set PCNAM=%%i)

echo ファイル%PCNAMtxt%が見つかりました
echo 実行条件のコンピュータ名は%PCNAM%です。

dir \\knas01\dist\_Template\TargetPC | findstr %COMPUTERNAME%
if %ERRORLEVEL% == 0 goto matchPC
if %ERRORLEVEL% == 1 goto unmatchPC

:matchPC
echo PC名合致した時の処理をします。
goto end

:unmatchPC
echo PC名が合致しないときの処理を実行します。
goto end

:end
set PCNAMtxt=
set PCNAM=
--------------------------------------------------------------

追加した処理は以下になります。

パス<\\FileSVR\ShareF\_Template\TargetPC>に保管されたTestPC01.txtのようなPC名と同じ名前のファイルを収集し、ファイル名を変数「PCNAMtxt」に保管します。(この時点でバッチを実行しているPC名が条件用テキストファイル名と合致する必要があります。)

保管されたファイル名から、拡張子.txtを取り払って、変数「PCNAM」に保管します。

echoコマンドでそれぞれの変数名に保管された文字列を画面表示してみました。

ファイル名とコンピュータ名が合致することの確認は実際の処理上は必要ない処理になりますが、エラー対処とか動作確認上は見えると役に立つこともあるので、dirコマンドの実行結果を変数に保管してみたサンプルバッチファイルが以上となります。