LoginSignup
0
0

More than 1 year has passed since last update.

この64GBのUSBメモリに使い道を

Posted at

32GB以下のUSBメモリは、
FAT32・NTFSどちらでも使用出来ますが
64GB以上になると通常では
NTFSやexFATのフォーマットしか選べず
FAT32フォーマットを行いたい場合は
パーティション操作が可能なアプリを使って
フォーマットする事で実現出来ます。

2023年4月現在
NTFSフォーマットされたUSBメモリでも
ブートは可能ですが、環境によっては
FAT32フォーマットが必要になります。

例えば、USBメモリへWindowsPEの作成を行う
MakeWinPEMedia コマンド 実行の際

ERROR: Failed to format D:; DiskPart errorlevel -2147212243
などと表示され、作成が出来ません。

この場合、
予めFAT32フォーマットを行ったUSBメモリを用意してから
MakeWinPEMedia を 実行する事で作成出来ます。

但し、パーティション操作アプリで作成を行った
FAT32フォーマット64GBのUSBメモリでは
同じようにエラーになってしまいます。

そのためフォーマットを行う区画を
32GBで区切る必要があります。

パーティション操作アプリでフォーマットを行うには
1. 区画を32GBで区切る
2. 32GBの領域をFAT32でフォーマット

パーティション操作アプリ以外の方法でフォーマットを行うには
① MediaCreation tool で 直接USBメモリへインストーラを作成
② DiskPart コマンド で 32GBに区切ってフォーマット
等があります。

①は、ダウンロードや作成に時間が掛かりますので
②を行うバッチを作成します。

GUIを入れるので

_inputbox.vbs
_msgbox.vbs
_起動可能USBメモリ作成.cmd

3つのファイルをコピペして
同じフォルダに配置してから
_起動可能USBメモリ作成.cmd
を実行して下さい。

初期化コマンドですから
Disk番号を間違えないように
細心の注意を払って実行して下さい。

実行すると
Disk番号と
NTFSフォーマット
FAT32フォーマット
32GBに区切ってフォーマット
フォーマットの種類を聞いてきますので
目的に沿ったフォーマットを選択して下さい。

USBメモリの容量を考慮していませんので
32GB以下のUSBメモリに
32GBに区切ってフォーマットを選択すると
エラーになります。

_起動可能USBメモリ作成.cmd
@echo off
SetLocal EnableDelayedExpansion

SET             タイトル="起動可能USBメモリ作成"

title ★ ★ ★ %タイトル:"=% ★ ★ ★

SET          メッセージ="● 処理開始前に、初期化するUSBメモリ のみ 接続し、crlfcrlf  その他のデバイスは、取り外しておいて下さい。crlfcrlf● 接続したUSBメモリ が 認識されてからcrlfcrlf  【 OK 】 を クリックして下さい。"
call cscript //Nologo "%~dp0_msgbox.vbs"   %メッセージ%   0 %タイトル% > nul

cls
echo;
echo;
set /p<nul="接続機器の確認中..."

rem /;
rem /; ハードウェアインターバルで念のため、10秒待つ
rem /;
ping -n 10 localhost > nul

for /f "tokens=2"           %%0 in ('echo.list disk ^| diskpart ^| find /i "ディスク" ^| find /i /v "gpt" ^| find /i /v "*"') do (
 set            Disk_Number=%%0
)

for /f "tokens=2"           %%0 in ('echo.list disk ^| diskpart ^| find /i "ディスク !Disk_Number!    メディアなし"') do (
 set            Disk_Number=
)

SET          メッセージ="USBメディア が 接続 又は 認識されていませんcrlfcrlf ★ 継続する    → 【 はい 】 を クリックcrlfcrlf ★ 処理をやめる → 【 いいえ 】 を クリック"
if  not DEFINED Disk_Number for /f "usebackq tokens=* delims=" %%0 in (`call cscript //Nologo "%~dp0_msgbox.vbs"   %メッセージ% 260 %タイトル%`) do SET 答え=%%0
if      "%答え%"=="No"  cls & goto :eof

cls
echo;Diskpart list disk の 実行結果を表示します
echo;         list disk | diskpart | find /i "ディスク"  | find /i /v "gpt"

:Input_Disk_Number

SET          メッセージ="crlf☆ 初期化する USBメモリ の ディスク № をcrlfcrlf  半角数字 で 入力して下さいcrlfcrlf  ディスク №の最大値がセットされてますcrlfcrlfcrlf※ コマンドプロンプト画面に表示されているcrlfcrlf  「ディスク?」の数字ですcrlfcrlfcrlf ★ OK → そのまま 【 OK 】 を クリックcrlfcrlf ★ 変更 → 変更後、 【 OK 】 を クリック"
SET              初期値=%Disk_Number%
for /f "usebackq tokens=* delims=" %%0 in (`call cscript //Nologo "%~dp0_inputbox.vbs" %メッセージ%     %タイトル% "%初期値%"`) do SET Select_Number=%%0

                                                           set Disk_Select=NG
for /L %%0 in (1,1,26) do if      "%%0"=="!Select_Number!" set Disk_Select=OK
SET          メッセージ="☆ 初期化するディスク番号入力でcrlfcrlf  1~26の半角数字以外が入力されましたcrlfcrlfcrlf ★ もう一度入力 → 【 はい 】 を クリックcrlfcrlf ★ 処理をやめる → 【 いいえ 】 を クリック"
if      "!Disk_Select!"=="NG" for /f "usebackq tokens=* delims=" %%0 in (`call cscript //Nologo "%~dp0_msgbox.vbs" %メッセージ% 4 %タイトル%`) do if      "%%0"=="Yes" ( goto :Input_Disk_Number ) else ( goto :eof )

SET          メッセージ="☆ ファイルシステムを指定して下さいcrlfcrlfNTFS  → 【 はい 】crlfcrlfFAT32 → 【 いいえ 】    ※ 通常は、これを選択crlfcrlf32GB-Fat32 → 【 キャンセル 】 ※ 32GBに区切って初期化します。crlfcrlf                           64GB以上のUSBメモリをcrlf                           FAT32で使用出来ます。crlf                           残りの領域は未使用になります。crlfcrlf                           32GB以下のUSBメモリに指定するとcrlf                           エラーになるので注意して下さい。"
for /f "usebackq tokens=* delims=" %%0 in (`call cscript //Nologo "%~dp0_msgbox.vbs"   %メッセージ% 259 %タイトル%`) do SET 答え=%%0
if      "%答え%"=="Yes"      set  FileSystem=NTFS
if      "%答え%"=="No"       set  FileSystem=FAT32
if      "%答え%"=="Cancel"   set  FileSystem=FAT32

SET          メッセージ="☆ ディスク 「 !Select_Number! 」 を 「 !FileSystem! 」 で 初期化しますcrlfcrlf ★ 実行する    → 【 はい 】 を クリックcrlfcrlf ★ 処理をやめる → 【 いいえ 】 を クリック"
for /f "usebackq tokens=* delims=" %%0 in (`call cscript //Nologo "%~dp0_msgbox.vbs"   %メッセージ% 260 %タイトル%`) do (
  if  not  "%%0"=="Yes" goto :eof
)

if  not "%答え%"=="Cancel" (
    (
          echo;rescan
     call echo;select disk %%Select_Number%%
          echo;clean
          echo;create partition primary
          echo;active
     call echo;format quick fs=%%FileSystem%%
          echo;assign
          echo;exit
    )  |  Diskpart
  ) else (
    (
          echo;rescan
     call echo;select disk %%Select_Number%%
          echo;clean
          echo;create partition primary Size=32767
          echo;active
     call echo;format quick fs=%%FileSystem%%
          echo;assign
          echo;exit
    )  |  Diskpart
)

rem /;
rem /; Diskpart の ERRORLEVEL が 失敗しても「0」で終わるので失敗メッセージ省略
rem /;

SET          メッセージ="起動可能なUSBメモリ【 !FileSystem! 】作成 が 完了しましたcrlfcrlf【 OK 】 を クリックして処理を終了して下さい"
call cscript //Nologo "%~dp0_msgbox.vbs"   %メッセージ%   0 %タイトル% > nul

_inputbox.vbs
Option Explicit
REM ------------------------------------------------------
REM inputbox.vbs str1 , str2 [,mode]
REM     str1:入力するデータの説明文
REM     str2:inputboxのタイトル
REM     str3:既定の入力データ
REM (動作)
REM データの入力を行う為の入力ボックスを表示します。
REM 入力された文字列データを返します。
REM str1 中の 「crlf」という文字列は改行に変換します。
REM ------------------------------------------------------
Dim args, arg(99), v, cnt
Dim str1, str2, str3
Dim mode
Dim respond, eLevel
Dim CRLF
REM 改行符号を設定します。
CRLF = chr(13) & chr(10)
Set args = WScript.Arguments
cnt = 1
For Each v In args
    arg(cnt) = v
        cnt  = cnt + 1
Next
eLevel  = 0: REM エラーが発生したときに値を設定します。
respond = "": REM 呼び出し元への戻り値を設定します。
REM --------------------------------
REM 改行文字の置き換え
arg(1) = RepExAll (arg(1), "crlf", CRLF)
eLevel = 0
Select Case args.Count
    Case 0:    mode = InputBox ()
    Case 1:    mode = InputBox (arg(1))
    Case 2:    mode = InputBox (arg(1), arg(2))
    Case Else: mode = InputBox (arg(1), arg(2), arg(3))
End Select
respond = mode
REM --------------------------------
REM 結果の表示
WScript.Echo respond
WScript.Quit (eLevel)
REM ここからサブルーチン=========================================
REM 原稿文字列を正規文字列で検索し、一致する文字をすべて置換文字列に置き換えます。
REM s : 原文字列
REM t : 正規文字列
REM d : 置換文字列
Function RepExAll ( s , t , d )
    Dim regExpression, Matches                ' 変数を作成します。
    Set regExpression        = New RegExp     ' 正規表現を作成します。
    regExpression.Pattern    = t              ' パターンを設定します。
    regExpression.IgnoreCase = True           ' 大文字と小文字を区別しないように設定します。
    regExpression.Global     = True           ' 文字列全体を検索するように設定します。
    RepExAll = regExpression.Replace(s , d)   ' 置換を実行します。
End Function

_msgbox.vbs
Option Explicit
REM ------------------------------------------------------
REM msgbox.vbs str1 , str2 [,mode]
REM     str1:表示するメッセージ
REM     num :表示するボタンの選択
REM     str2:メッセージボックスのタイトル
REM (動作)
REM メッセージボックスを表示し、クリックされたボタンを
REM 返します。
REM str1 中の 「crlf」という文字列は改行に変換します。
REM ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
REM ボタンの表示選択と動作などの設定(ボタン表示や動作などの値を合計します。)
REM     0 [OK] ボタンのみを表示します。
REM     1 [OK] ボタンと [キャンセル] ボタンを表示します。
REM     2 [中止]、[再試行]、および [無視] の 3 つのボタンを表示します。
REM     3 [はい]、[いいえ]、および [キャンセル] の 3 つのボタンを表示します。
REM     4 [はい] ボタンと [いいえ] ボタンを表示します。
REM     5 [再試行] ボタンと [キャンセル] ボタンを表示します。
REM    16 警告メッセージ アイコンを表示します。
REM    32 問い合わせメッセージ アイコンを表示します。
REM    48 注意メッセージ アイコンを表示します。
REM    64 情報メッセージ アイコンを表示します。
REM     0 第 1 ボタンを標準ボタンにします。
REM   256 第 2 ボタンを標準ボタンにします。
REM   512 第 3 ボタンを標準ボタンにします。
REM   768 第 4 ボタンを標準ボタンにします。
REM     0 アプリケーション モーダルに設定します。
REM       メッセージ ボックスに応答するまで、現在選択中のアプリケーションの実行を継続できません。
REM  4096 システム モーダルに設定します。
REM       メッセージ ボックスに応答するまで、すべてのアプリケーションが中断されます。
REM ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
REM 戻り値となる文字列
REM   ボタンの名前     -> respondの戻り値
REM     [OK]           -> Ok
REM     [キャンセル]   -> Cancel
REM     [中止]         -> Stop
REM     [再試行]       -> Retry
REM     [無視]         -> Ignore
REM     [はい]         -> Yes
REM     [いいえ]       -> No
REM ------------------------------------------------------
Dim args, arg(99), v, cnt
Dim str1, str2
Dim mode
Dim respond, eLevel
Dim CRLF
REM 改行符号を設定します。
CRLF = chr(13) & chr(10)
Set args = WScript.Arguments
cnt = 1
For Each v In args
    arg(cnt) = v
    cnt = cnt + 1
Next
REM 改行文字の置き換え
arg(1) = RepExAll (arg(1), "crlf", CRLF)
eLevel = 0
Select Case args.Count
    Case 0:    mode = 0: eLevel = 1
    Case 1:    mode = MsgBox (arg(1))
    Case 2:    mode = MsgBox (arg(1), arg(2))
    Case Else: mode = MsgBox (arg(1), arg(2), arg(3))
End Select
Select Case mode
    Case 0: respond = ""
    Case 1: respond = "Ok"
    Case 2: respond = "Cancel"
    Case 3: respond = "Stop"
    Case 4: respond = "Retry"
    Case 5: respond = "Ignore"
    Case 6: respond = "Yes"
    Case 7: respond = "No"
End Select
REM 結果の表示
WScript.Echo respond
WScript.Quit (eLevel)
REM ここからサブルーチン=========================================
REM 原稿文字列を正規文字列で検索し、一致する文字をすべて置換文字列に置き換えます。
REM s : 原文字列
REM t : 正規文字列
REM d : 置換文字列
Function RepExAll ( s , t , d )
    Dim regExpression, Matches                ' 変数を作成します。
    Set regExpression = New RegExp            ' 正規表現を作成します。
    regExpression.Pattern    = t              ' パターンを設定します。
    regExpression.IgnoreCase = True           ' 大文字と小文字を区別しないように設定します。
    regExpression.Global     = True           ' 文字列全体を検索するように設定します。
    RepExAll = regExpression.Replace(s , d)   ' 置換を実行します。
End Function

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0