Obtener el número de volumen del disco mediante la etiqueta del volumen mediante programación por lotes

Obtener el número de volumen del disco mediante la etiqueta del volumen mediante programación por lotes

Quiero crear una secuencia de comandos para montar automáticamente una unidad en Windows especificando únicamente su etiqueta de volumen. La idea es proporcionar la etiqueta y recuperar el número de volumen y usarlo en diskpart a través de un script.

Usando ChatGPT pude llegar a alguna parte, pero no puedo decir que pude seguirlo completamente porque no tengo mucha experiencia con la programación por lotes. También podría ser que la respuesta no haya sido la mejor.

ChatGPT sugirió:

@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
)

Y el script (archivo separado) era

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

Suponiendo que "Super Drive" es la etiqueta de la unidad, ¿cómo puedo hacer que funcione simplemente haciendo doble clic en el archivo bat? Por cierto, sé que diskpart necesita un script independiente para automatizarlo (script.txt), pero no estoy seguro de cómo escribirlo.

<disk label> 
<disk letter>

Gracias.

Respuesta1

@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

información relacionada