前回紹介したIPアドレスの設定方法の応用として、リストから各PCのIPアドレスを設定する方法をご紹介します。
IPアドレスの設定方法は前回の記事を参照して下さい。
PCを大量にキッティングする時などは、この方法を使えば各PCでこのバッチを実行するだけで、IP設定が出来る用になるのでかなり楽になると思います。
各処理の内容がかなり長くなるので、とにかく完成したバッチファイルが先に見たい方は目次で「3 バッチファイル作成」にお進み下さい。
リストの用意
実行するバッチファイルを保存するフォルダに「List」というフォルダを作成します。
Listフォルダに「List.csv」ファイルを作成し、下図のように設定内容を記載します。
14行目まではリストの書式説明なので省いてしまっても構いません。
実際に設定に必要となるのは15行目PC一覧以下からで、各項目の間は必ずカンマで区切らないと設定内容を読み込めなくなります。
PC名はコンピューター名を記入しておきます。今回のバッチファイルではコンピューター名から各設定項目を取り込むように設定します。
各処理の作成
リストの読み込み
まずは読み込むリストを指定します。
上で作成したリストを指定するのでリストのフォルダパスは下記となります。
バッチファイルのあるフォルダ\List\List.csv
バッチファイルでは実行されているファイルのカレントディレクトリは「%~dp0」で表せるので、リストの指定は下記コマンドで行います。
1 2 |
rem Listを取得 SET FILE_LIST=%~dp0List\List.csv |
List.csvを変数「FILE_LIST」に格納しました。
次に指定したリストの中身を下記コマンドで読み込みます。
1 2 3 4 5 6 7 8 9 10 11 12 |
rem リスト読み込み for /F "delims=(,) tokens=1-7" %%a in (%FILE_LIST%) do ( if %COMPUTERNAME%==%%a ( SET PCname=%%a SET IPset=%%b SET DNSset=%%c SET IP=%%d SET GW=%%e SET MASK=%%f SET DNS1=%%g ) ) |
使用しているコマンドの意味は
for /F “トークンオプション” %%a in (処理対象) do コマンド ・トークンオプション delims=(,) ・・・ トークンの区切り文字の指定(この場合はカンマを指定) tokens=1-7 ・・・ 指定するトークンの番号を指定(この場合は1~7) 今回の場合は下記のような意味のコマンドになってます。 List.csvの内容を1行ずつ取り出して、カンマで区切られたうちの1番目~7番目をaから順番に代入して、次のコマンドを実行します。 %COMPUTERNAME%は実行しているPCのコンピュータ名を返す環境変数なので、PCのコンピュータ名がリストのコンピュータ名と一致する場合リストのそれぞれの値をそれぞれの変数にセットするコマンドになってます。 |
PC名がリストに存在するかの確認
これは念のためですが、実行しているPCのPC名がリストに存在しているか確認し、存在しない場合のエラー処理を追加します。
まず上で作成したコマンドに下記コマンドを追加します。
SET FLG=0
SET FLG=1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
rem Listを取得 SET FILE_LIST=%~dp0List\List.csv SET FLG=0 rem リスト読み込み for /F "delims=(,) tokens=1-7" %%a in (%FILE_LIST%) do ( if %COMPUTERNAME%==%%a ( SET PCname=%%a SET IPset=%%b SET DNSset=%%c SET IP=%%d SET GW=%%e SET MASK=%%f SET DNS1=%%g SET FLG=1 ) ) |
次にPC名がリストになかった場合の処理を指定します。
1 2 3 4 5 6 7 |
rem ホスト名の存在確認 if %FLG% == 0 ( echo ------------------------------------------------------------------------------- echo PC名[%COMPUTERNAME%]の情報が確認できませんでした。 echo ------------------------------------------------------------------------------- goto err ) |
これでPC名がリストにない場合はIP設定の処理は行わず、エラー処理に廻ります。(エラー処理については「2.5エラー処理」で詳細を記載します。)
リストにPC名が存在する場合はこの処理はスキップされIP設定に移ります。
IPアドレス設定
前回使用したIP変更バッチを変数を使って使用します。
また、IP設定を固定にするかdhcpにするかで処理を分岐させています。
1 2 3 4 5 6 7 8 9 |
rem IP設定 if %IPset% == static ( netsh interface ipv4 set add name="イーサネット" source=static addr=%IP% mask=%MASK% gateway=%GW% ) else if %IPset% == dhcp ( netsh interface ipv4 set add name="イーサネット" source=dhcp ) else ( echo staticかdhcpを選択して下さい goto err ) |
リストのIP設定方法を「static」にしてるか「dhcp」にしてるかで処理を分けてます。
どちらにも指定していない場合はエラー処理に回るようになってます。
DNS設定
ほぼほぼIP設定と一緒です。
1 2 3 4 5 6 7 8 9 |
rem DNS設定 if %DNSset% == static ( netsh interface ipv4 set dns name="イーサネット" source=static addr=%DNS1% register=primary ) else if %DNSset% == dhcp ( netsh interface ipv4 set dns name="イーサネット" source=dhcp ) else ( echo staticかdhcpを選択して下さい goto err ) |
エラー処理
エラー処理にはラベルとgoto文を使用します。
goto ラベル名 ・・・ 指定したラベルに移ります。
:ラベル名 ・・・ ラベル名の指定
上の各処理でエラー処理に回す際「goto err」としてたのはerrラベルの処理に移るという意味です。
なので、バッチファイルの一番最後にerrラベルで終了するように設定することで、エラー発生時には終了処理をするようにできます。
1 2 3 |
:err pause exit |
バッチファイル作成
上で作成した各処理をバッチファイルとして作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
@echo off rem Listを取得 SET FILE_LIST=%~dp0List\List.csv SET FLG=0 rem リスト読み込み for /F "delims=(,) tokens=1-7" %%a in (%FILE_LIST%) do ( if %COMPUTERNAME%==%%a ( SET PCname=%%a SET IPset=%%b SET DNSset=%%c SET IP=%%d SET GW=%%e SET MASK=%%f SET DNS1=%%g SET FLG=1 ) ) rem ホスト名の存在確認 if %FLG% == 0 ( echo ------------------------------------------------------------------------------- echo PC名[%COMPUTERNAME%]の情報が確認できませんでした。 echo ------------------------------------------------------------------------------- goto err ) rem IP設定 if %IPset% == static ( netsh interface ipv4 set add name="イーサネット" source=static addr=%IP% mask=%MASK% gateway=%GW% ) else if %IPset% == dhcp ( netsh interface ipv4 set add name="イーサネット" source=dhcp ) else ( echo staticかdhcpを選択して下さい goto err ) rem DNS設定 if %DNSset% == static ( netsh interface ipv4 set dns name="イーサネット" source=static addr=%DNS1% register=primary ) else if %DNSset% == dhcp ( netsh interface ipv4 set dns name="イーサネット" source=dhcp ) else ( echo staticかdhcpを選択して下さい goto err ) pause exit :err pause exit |
以上、完成です。
コメントを残す