Windows PCの設定を可能な限り自動化するバッチ


<h1>始めに</h1>
    <h2>この記事ではPCのデータ移行をする際に必要な設定情報の移行をバッチファイルで行う方法を記載しているよ。
    <br>レジストリファイルを書き換えるコマンドがあるから、よい子のみんなはPCに詳しい大人と一緒にやってみてね。
    </h2>
    <h2>管理者として実行</h2>
    <h3>レジストリをエクスポート、実行する際に管理者権限が求められることがあるよ。
    <br>毎回管理者権限でバッチファイルを実行してもらうより、バッチファイル上で勝手に管理者として実行してもらうほうが便利だね。</h3>
   
 ```
rem #管理者でないなら管理者モードで自身を実行
openfiles > nul 2>&1
if errorlevel 1 (
echo #-----------------------------------------------------------
echo #▼管理者へsuさせる
echo #-----------------------------------------------------------
    PowerShell.exe -Command Start-Process ""%0"" -Verb runas
    exit
)
```

<h1>旧PCで実行するコマンド</h1>
<h2>ユーザーアカウント制御を通知しないに変更</h2>
<h3>管理共有できるようになるよ。</h3>

```
echo 【UACを切る】
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v EnableLUA /t "REG_DWORD" /d "0" /f
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462058/3d056703-9f23-92f9-5f86-c35566be57a4.png)

<h2>設定データを保存するためのフォルダを作成</h2>

```
echo C直下に移行ツールフォルダを作成する
md %HOMEDRIVE%\移行ツール
md %HOMEDRIVE%\移行ツール\Backup
```

<h2>コンピュータの情報を取得</h2>
<h3>以下の変数を使用するよ</h3>

```
set B=%HOMEDRIVE%\移行ツール\Backup
```

```
echo ユーザー名取得
echo %username% > "%B%\username.txt"

echo コンピュータ名取得
echo %computername% > "%B%\computername.txt"

echo ネットワーク設定を取得
echo ipconfig /all > "%B%\IPaddress.txt"
```
:::note info
今回はテキストに出力しているよ。
PC名をレジストリで取得したい場合は以下にあるよ。
```
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName
```
:::


<h2>インターネットオプションの設定情報を取得</h2>

```
echo ie互換表示
reg export "HKCU\Software\Microsoft\Internet Explorer\BrowserEmulation\ClearableListData" "%B%\IE互換表示設定.reg" /y

echo 信頼済みサイト
reg export "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap" "%B%\ZoneMap.reg" /y
reg export "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones" "%B%\Zones.reg" /y

echo ポップアップブロック
reg export "HKCU\Software\Microsoft\Internet Explorer\New Windows\Allow" 

echo ieスタートページ
FOR /F "TOKENS=4" %%I IN ('REG QUERY "HKCU\Software\Microsoft\Internet Explorer\Main" /v "Start Page"') DO  SET VAL1=%%I
echo %VAL1% > "%B%\StartPage.txt"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462058/7e6df406-51a6-9896-26c0-cd1f7863c625.png)

<h2>Outlookの設定情報の取得</h2>
<h3>メールサーバーのパスワード以外の設定情報を取得するよ。
<br>事前にパスワードは取得しておこう。</h3>

```
echo Outlook情報の取得
reg export "HKCU\Software\Microsoft\Office\16.0\Outlook\Profiles\Outlook" "%B%\MailInfo.reg" /y
```

:::note info
Outlookのバージョンによってレジストリの場所が異なるよ
以下表を参考に、コマンドを変えてみよう！
:::

 <table border="1">
   <th>Outlook</th>
      <th>レジストリキー</th>
    </tr>
    <tr>
      <td>Outlook 2010</td>
      <td>	HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook</td>
    </tr>
    <tr>
      <td>Outlook 2013</td>
<td>HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Profiles\Outlook</td>
    </tr>
     <tr>
      <td>Outlook 2016</td>    <td>HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Profiles\Outlook</td>
    </tr>
         <tr>
      <td>Outlook for Office365</td>    <td>HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Profiles\Outlook</td>
    </tr>
</table>

    
<h2>ネットワークと共有センターを表示する</h2>
  <h3>ネットワーク共有の設定やパスワード保護の設定を変更しよう。
    <br>管理共有を行わない場合は必要ないよ。</h3>
    
```
echo NW共有センターを開く
control.exe /name Microsoft.NetworkAndSharingCenter /page Advanced
```

<h2>再起動</h2>
<h3>ユーザーアカウント制御を変更する際は必須だよ。
<br>再起動する必要が無い場合は無視してね。</h3>

```
echo 【直ちに再起動】
shutdown /F /R /T 0
```

<h1>新PCで実行するコマンド</h1>
<h2>移行フォルダの作成</h2>
<h3>ここでも移行フォルダのパスを変数に使うよ。</h3>

```
set B=%HOMEDRIVE%\移行ツール\Backup
md %B%
```

<h2>設定データ移行</h2>
<h3>コマンドプロンプト上に対象のユーザー名、IPアドレスを入力しようね。</h3>

```
set /p name=旧PCのユーザー名を入力してください:
echo %name% >%B%\oldname.txt

set /p oldIP=旧PCのIPアドレスを入力してください:
echo %oldIP% >%B%\oldIP.txt

start \\%oldIP%\c$

echo 旧PCのIPアドレスをセットする
for /f %%a in (%B%\oldIP.txt) do (
set oldIP=%%a
)

echo 移行ツールの移行
robocopy.exe "\\%oldIP%\c$\移行ツール" "%HOMEDRIVE%\移行ツール" *.* /E /MOVE /R:0 /W:0

echo ;
echo ;
echo ----------移行したregファイルを新PCで実行する-----------

echo IE互換表示設定
start %B%\IE互換表示設定.reg

echo 信頼済みサイト設定
start %B%\ZoneMap.reg

start %B%\Zones.reg

echo Outlook情報の取得
start %B%\MailInfo.reg

echo ;
echo ;
echo -----------IEのスタートページを引き継ぐ-----------
echo IEのスタートページを移行する
for /f %%b in (%B%\startpage.txt) do (

reg add "HKCU\Software\Microsoft\Internet Explorer\Main" /v "Start Page" /t REG_SZ /d %%b /f
)

pause
exit
```