일괄 프로그래밍을 통해 볼륨 레이블로 디스크 볼륨 번호 가져오기

일괄 프로그래밍을 통해 볼륨 레이블로 디스크 볼륨 번호 가져오기

볼륨 레이블만 지정하여 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

관련 정보