バッチプログラミングによるボリュームラベルによるディスクボリューム番号の取得

バッチプログラミングによるボリュームラベルによるディスクボリューム番号の取得

ボリューム ラベルのみを指定して Windows にドライブを自動的にマウントするスクリプトを作成したいと考えています。アイデアは、ラベルを指定してボリューム番号を取得し、それをスクリプトを通じて diskpart で使用することです。

ChatGPT を使用すると、ある程度は理解できましたが、バッチ プログラミングの経験があまりないため、完全に理解できたとは言えません。また、回答が最適ではなかった可能性もあります。

ChatGPT が提案:

@echo off
for /f "tokens=1" %%i in ('wmic logicaldisk where "DriveType=3" get VolumeName /value') do (
  set disklabel=%%i
  echo Found disk label: %disklabel%
  diskpart /s script.txt
)

そしてスクリプト(別ファイル)は

select volume <disk label>
assign letter=<drive letter>

「Super Drive」がドライブのラベルだと仮定すると、batファイルをダブルクリックするだけで動作させるにはどうすればよいのでしょうか?ところで、diskpartを自動化するには別のスクリプト(script.txt)が必要であることは知っていますが、どのように記述すればよいかわかりません。

<disk label> 
<disk letter>

ありがとう。

答え1

@echo off && Setlocal EnableDelayedExpansion

for /f tokens^=4delims^=^>^< %%i in =;('
     wmic.exe logicaldisk where "DriveType=3" get VolumeName^,Caption /format:xml ^| find "/VALUE"
   ')do if "!_Caption!" == "" (set "_Caption=%%~i")else set "_DiskLabel=%%~i" && echo\ Found: !_DiskLabel!

if /i "Super Drive" == "!_DiskLabel!" >"%temp%\%~n0.txt" =;(
      echo\ Select volume !_DiskLabel! 
      echo\ Assign letter=!_Caption! 
     );=

findstr "S A" <"%temp%\%~n0.txt" && 2>nul =;(
     diskpart.exe /s "%temp%\%~n0.txt"
     timeout 3 | del "%temp%\%~n0.txt" 
    );= 

endlocal

関連情報