Windows NT系とOnedriveを使って AUTOEXEC.BATを実現する

#OneDriveを使用した、AUTOEXEC.BAT

パソコンの初期設定がとても簡単になります。

このままソースをパクって、お使いください。

OneDrive上に普段からよく使う小さなアクセサリ（TeraTerm、エディタ、ホットキーランチャー、その他）を入れておくと、OneDriveに連携して、セットアップのバッチファイルを起動するだけで、簡単にアプリをインストールすることができます。

:::note info
かつてこの方式を使用して自動でネットワークドライブに接続したり、法人向けセキュリティーソフトの自動インストール＆自動アップグレードを行っていたことがありました。
:::


#必要なもの
OneDrive - 今では標準インストールされています。
コンピュータ名 - 初期設定のままでも動きますが、任意のコンピュータ名を指定すると楽に使えます。

#setupbat.bat
インストーラです。
OneDriveのAUTOEXECのルートに設置します。

```setupbat.bat
copy 0startup.bat c:\users\%USERNAME%\desktop
copy 0startup.bat c:\users\%USERNAME%
copy 0startup.bat "c:\users\%USERNAME%\appdata\roaming\microsoft\windows\start menu\programs\startup"
```

#0startup.bat
自動起動バッチその１です
OneDriveのAUTOEXECのルートに設置します。

```0startup.bat
@echo off
set ODAUTOEXEC=（OneDrive上のディレクトリ名）
call %HOMEPATH%\OneDrive\%ODAUTOEXEC%\auto1.bat
```

#1startup.bat
自動起動バッチその２です
OneDriveのAUTOEXECのルートに設置します。

```1startup.bat
@echo off
set ODAUTOEXEC=Nano-Autoexec
call %HOMEPATH%\OneDrive\%ODAUTOEXEC%\auto2.bat
```

``auto1.bat
１つめ、２つめの自動起動を両方実行します。
このファイルを起動する元の0startup.batがWindowsのスタートアップから起動します。
OneDriveのAUTOEXECのルートに設置します。

```auto1.bat
@echo off
:all
echo %COMPUTERNAME% from %USERNAME%
cd %HOMEPATH%\OneDrive\%ODAUTOEXEC%
copy 0startup.bat "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup"
copy 1startup.bat "%USERPROFILE%\Desktop"
cd %COMPUTERNAME%-%USERNAME%
call autoexec1.bat
call autoexec2.bat
```

``auto2.bat
２つめの自動起動を両方実行します。
こちらはスタートアップから起動しません。
OneDriveのAUTOEXECのルートに設置します。

```auto2.bat
@echo off
:all
echo %COMPUTERNAME% from %USERNAME%
cd %HOMEPATH%\OneDrive\%ODAUTOEXEC%
copy 0startup.bat "%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup"
copy 1startup.bat "%USERPROFILE%\Desktop"
cd %COMPUTERNAME%-%USERNAME%
call autoexec1.bat
call autoexec2.bat
```

#autoexec1.bat
コンピュータ名-ユーザー名のフォルダ下に設置する実実行ファイルです。
フォルダは、例えば
コンピュータ名が「NANAMI」
ユーザー名が「なの」
と仮定すれば
「NANAMI-なの」
というフォルダ名を作成し、その配下にファイルを設置します。

```autoexec1.bat
@echo off
echo.
echo ■■■ スタートアップ ■■■
pushd .
call exec.bat
popd
```

#autoexec2.bat
コンピュータ名-ユーザー名のフォルダ下に設置する実実行ファイルです。
ネットワーク接続に特化した実行ファイルです。

```autoexec2.bat
@echo off

echo.
echo ■■■ ネットワーク接続 ■■■
pushd .
call smb.bat
popd
```

#exec.bat
自動実行アプリの起動です。
コンピュータ名-ユーザー名のフォルダ下に設置する実実行ファイルです。
更に、コンピュータ名-ユーザー名の配下に
startup\high
startup\low
startup\normal
のフォルダを作成します。

```exec.bat
@echo off

call kill.bat

cd startup\high
for %%i in (*.*) do call ..\..\startbat.bat /MIN /HIGH "%%i" "%%i"
cd ..\..

cd startup\normal
for %%i in (*.*) do call ..\..\startbat.bat /MIN /NORMAL "%%i" "%%i"
cd ..\..

cd startup\low
for %%i in (*.*) do call ..\..\startbat.bat /MIN /LOW "%%i" "%%i"
cd ..\..
```
startup\high
startup\low
startup\normal

には、ショートカットのファイル（拡張子 .lnk）を設置します。

#kill.bat
タスクを強制終了するバッチです。

これは誤り、もしくは起動したアプリの不具合で再起動したい時に有用となります。

コンピュータ名-ユーザー名のフォルダ下に設置する実実行ファイルです。
更に、コンピュータ名-ユーザー名の配下に
kill\kill.txt
のファイルを設置します。

```kill.bat
@echo off
FOR /F "eol=; tokens=1,2* delims=, " %%i in (kill\kill.txt) do (
	echo kill %%i
	taskkill /F /T /IM %%i
)
```

##kill.txt
強制終了するアプリを登録します。
これは一例です。

```kill.txt
volume2.exe
volume2pm.exe
```

#smb.bat
ネットワーク接続の共通ファイルを起動します。
コンピュータ名-ユーザー名のフォルダ下に設置する実実行ファイルです。

```smb.bat
@echo off
call ..\smb\smb.bat ゾーン名
```

#smb.bat
ネットワーク接続の実実行ファイルです。
smb フォルダ配下に設置します。

```smb.bat
@echo off

FOR /F "eol=; tokens=1,2,3* delims= " %%i in (..\smb\smb\%1.txt) do (
	if "%%i"=="check" (
		set phost=%%j
		echo Check Network to %%j
		ping -w 1 -n 1 %%j >NUL
		IF ERRORLEVEL 1 goto perror
	) else (
		echo Connect %%j to %%k

		if "%%i"=="samba" (
			net use %%j /d >NUL
			net use %%j %%k /user:ユーザー名 パスワード
			dir %%j\>nul
		)
		if "%%i"=="newsamba" (
			net use %%j /d >NUL
			net use %%j %%k /user:ユーザー名 パスワード
			net use %%j %%k
			dir %%j\>nul
		)
		if "%%i"=="linuxnas" (
			net use %%j /d >NUL
			net use %%j %%k /user:ユーザー名
			net use %%j %%k
			dir %%j\>nul
		)
		if "%%i"=="win" (
			net use %%j /d >NUL
			rem net use %%j %%k /user:ユーザー名
			net use %%j %%k >NUL 2>NUL
			IF ERRORLEVEL 1 (
				echo Can't connerct %%j=%%k
			)
			dir %%j\>nul
		)
		if "%%i"=="newwin" (
			net use %%j /d >NUL
			rem net use %%j %%k /user:ユーザー名 パスワード
			net use %%j %%k >NUL 2>NUL
			IF ERRORLEVEL 1 (
				echo Can't connerct %%j=%%k
			)
			dir %%j\>nul
		)
	)
)

goto pexit

:perror
echo Error connect to %phost%
goto pexit

:pexit
```

#ネットワークゾーンファイル
smb\smb 配下に設置するファイルです。
ですが、以下のコマンドがいい加減な命名になってます。

check IPアドレスorホスト名 ＝ そのホストが存在するかチェック
win ＝ パスワードなし（サーバーのユーザー名とパスワードが同一）なWindowsに接続
newwin＝パスワードあり（パスワードが異なる）なWindowsに接続
samba＝sambaに接続、その１
newsamba＝sambaに接続、その２（パスワードあり）
linuxnas＝パスワードなしのsambaに接続

##以下、どこにも接続しない場合
```none.txt
check 192.168.255.254
```

```いろいろ.txt
check NANAMI
win x: \\NANAMI\software
win t: \\NANAMI\Video
win u: \\NANAMI\Music
check RPI4
newsamba k: \\RPI4\ymda
check freebsd.example.jp
newsamba s: \\freebsd.example.jp\ymda
check WINDOWSNAS
win z: \\WINDOWSNAS\ymda
win y: \\WINDOWSNAS\public
win x: \\WINDOWSNAS\software
win t: \\WINDOWSNAS\Video
win r: \\WINDOWSNAS\site
win a: \\WINDOWSNAS\ドキュメント
win u: \\WINDOWSNAS\Music
win b: \\WINDOWSNAS\cloud
```

#さいごに
このバッチファイルでは残念ながらマルチスレッドで行うことはできませんが、確実に簡単に自動実行やネットワーク接続を確実に行います。

バッチファイルですのでとても容易に変更できますので、簡単に拡張できるかと思われます。