パソコンやプリンターの情報をバッチファイルでテキスト出力する　Windows10や11

# はじめに

PCのキッティングをしていて「こんなこと必要になるのかぁ？」とふと思いつきました。


「.bat」ファイルを管理者実行して
PCの基本的な情報や設定したプリンター情報を取得します。

そして「.txt」ファイルでデスクトップに出力して完了です。
ただし、新しく「メモ帳」を起動して下記のコードを貼り付けて、
保存する際には「***.bat」で保存します。


作成方法は前記事[Windows10・11 一時ファイル(ディスククリーンアップ)の一括設定](https://qiita.com/genbamon/items/60c7d0df2a5a8528cc03)
の②をご参照ください。

::: note warn
検証を重ねてコード掲載に至っておりますが、ご利用は最新の公式情報を参照の上、自己責任でお願い申し上げます。

また、ある程度コマンドプロンプトや、PowerShellを実行経験済みの方が参考にされる事をお勧めします。

一部手順を省略している場合があり、お使いのOS環境によりましては上手く動作しない場合がございます。

:::
```:.batファイルのコード
@echo off
rem 管理者実行
if not "%1"=="am_admin" (powershell start -verb runas '%0' am_admin & exit /b)
setlocal enabledelayedexpansion

set /p answer="PC情報はエクスポート済みですか？(y/n):"

if "%answer%" == "y" (
  echo かしこまりました。抽出をスキップします。
goto end 
) else if "%answer%" == "n" (
  echo PC情報抽出を開始します。
) 

rem 現在サインインしているユーザー名を取得
for /f "tokens=2 delims=\\" %%A in ('whoami') do set User_NAME=%%A


rem デバイス名
for /f "usebackq delims=" %%A in (`powershell -Noprofile -ExecutionPolicy Unrestricted -command "(Get-CimInstance -ClassName Win32_ComputerSystem).Name"`) do set PC_NAME=%%A


rem 使用しているOS名
for /f "usebackq delims=" %%A in (`powershell -Noprofile -ExecutionPolicy Unrestricted -command "(Get-CimInstance Win32_OperatingSystem).caption + ' ' + (Get-CimInstance Win32_OperatingSystem).OSArchitecture"`) do set OS_VERSION=%%A


rem メーカー名
for /f "usebackq delims=" %%A in (`powershell -Noprofile -ExecutionPolicy Unrestricted -command "(Get-CimInstance win32_ComputerSystem).Manufacturer"`) do set MANUFACTURER=%%A

rem モデル名
for /f "usebackq delims=" %%A in (`powershell -Noprofile -ExecutionPolicy Unrestricted -command "(Get-CimInstance win32_ComputerSystem).model"`) do set MODEL=%%A


rem CPU名
for /f "usebackq delims=" %%A in (`powershell -Noprofile -ExecutionPolicy Unrestricted -command "(Get-CimInstance Win32_Processor).Name"`) do set CPU=%%A


rem Macアドレス 有線
for /f "usebackq delims=" %%A in (`powershell -Noprofile -ExecutionPolicy Unrestricted -command "(Get-NetAdapter  -physical -includeHidden -Name イーサネット*).MacAddress"`) do set Ethernet_MAC=%%A


rem Macアドレス Wi-Fi
for /f "usebackq delims=" %%A in (`powershell -Noprofile -ExecutionPolicy Unrestricted -command "(Get-NetAdapter  -physical -includeHidden -Name Wi-Fi*).MacAddress"`) do set WiFi_MAC=%%A




REM 情報をテキストファイルに出力
set "OUTPUT_FILE=%USERPROFILE%\Desktop\ExportPC.txt"


echo 【基本情報】 > "%OUTPUT_FILE%"
echo ユーザー名:　%User_NAME% >> "%OUTPUT_FILE%"
echo PC名: %PC_NAME% >> "%OUTPUT_FILE%"
echo メーカー: %MANUFACTURER% >> "%OUTPUT_FILE%"
echo CPU: %CPU% >> "%OUTPUT_FILE%"
echo 型番: %MODEL% >> "%OUTPUT_FILE%"
echo OSの種類: %OS_VERSION% >> "%OUTPUT_FILE%"
echo 有線MACアドレス:%Ethernet_MAC% >> "%OUTPUT_FILE%"
echo Wi-FiMACアドレス:%WiFi_MAC% >> "%OUTPUT_FILE%"
echo. >> "%OUTPUT_FILE%"


REM プリンター情報を変数に格納
powershell -NoProfile -ExecutionPolicy unrestricted -Command "Get-Printer | Where-Object { $_.Name -notmatch 'OneNote|Microsoft Print to PDF' }| Select-Object -Property Name,PortName | Format-Table -HideTableHeaders " >> %OUTPUT_FILE%


:end

rem 1~3の番号入力によって実行内容が変わる。
set /p answer="1: 共有設定のエクスポート, 2: 共有設定のインポート, 3: 何もしない (1/2/3): "

if "%answer%" == "1" (
  echo エクスポートを実行します。
  rem 共有設定のエクスポート
  reg export HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares %UserProfile%\desktop\reg.reg /y
) else if "%answer%" == "2" (
  echo インポートを実行します。
  rem 共有設定のインポート  
  reg import %UserProfile%\desktop\reg.reg
  rem サービスのServerを再起動
  net stop Server
  net start Server
) else if "%answer%" == "3" (
  echo 何もしません。
)

REM デバイス名を取得
set deviceName=%COMPUTERNAME%

REM ユーザー名を取得
for /f "tokens=*" %%i in ('net user %USERNAME% ^| findstr /c:"フル ネーム"') do (
    set fullName=%%i
)



REM フルネームを整形
rem set fullName=%fullName:Full Name=%
rem set fullName=%fullName: =%

rem 空白を削除
set fullName=%fullName:Full Name=%
set fullName=%fullName:フル ネーム=%

set fullName=%fullName: =%



REM VBSスクリプトを作成
echo Set objExcel = CreateObject("Excel.Application") > update_excel.vbs
echo Set objWorkbook = objExcel.Workbooks.Open("%userprofile%\Desktop\test.xlsx") >> update_excel.vbs
echo Set objSheet = objWorkbook.Sheets(1) >> update_excel.vbs
echo objSheet.Range("C4").Value = "%deviceName%" >> update_excel.vbs
echo objSheet.Range("E4").Value = "%fullName%" >> update_excel.vbs
echo objWorkbook.Save >> update_excel.vbs
echo objExcel.Quit >> update_excel.vbs

REM VBSスクリプトを実行
cscript update_excel.vbs

REM VBSスクリプトを削除
del update_excel.vbs


endlocal
pause
```

<br>
<br>

:::
```:バッチファイルの実行場所のパスを変数に格納

REM バッチファイルのディレクトリパスを取得
set scriptDir=%~dp0

REM バックスラッシュを削除
set scriptDir=%scriptDir:~0,-1%
:::
<br>
<br>

:::
```:GUI画面の起動

remコンピューターの管理を開く
start /max mmc compmgmt.msc

REM デバイスとプリンターを最大化して開く
start /max control printers

rem Snipping Toolを開く
start snippingtool

:::

<br>
<br>

:::
```:接続履歴のあるWi-Fi一覧を「.txt」で出力する。.batコード
@echo off

netsh wlan show profiles > wifi_profiles.txt
for /F "tokens=*" %%i in ('netsh wlan show profiles ^| findstr /C:"All User Profile"') do netsh wlan show profile name="%%i" key=clear >> wifi_profiles.txt

pause
:::

<br>

:::
```:接続履歴のあるWi-Fi一覧を表示するコマンド
netsh wlan show profiles
:::
<br>

:::
```:接続履歴のあるWi-Fiの***を見るコード
netsh wlan show profiles name=*** key=clear | Select-String -Pattern "主要なコンテンツ"
:::


#　以上です。最後まで閲覧いただきありがとうございました。