Я потратил несколько часов, пытаясь понять это. Пожалуйста, окажите небольшую помощь :)
Я использую это для захвата буквы диска:
FOR /F "tokens=2 usebackq delims= = " %i IN (`wmic volume where "Label='System Reserved'" get DriveLetter /format:list`) DO @echo %i
Работает отлично, но возвращается driveletter:
Мне нужно, чтобы : исчезло,
поэтому я могу передать символ алфавита только как переменную в diskpart
Вот что у меня есть:
SET SOURCE=SystemReserved
FOR /F "tokens=2 usebackq delims= = " %i IN (`wmic volume where "Label='System Reserved'" get DriveLetter /format:list`) DO set SystemReserved=%1
IF "%SystemReserved%"= = "" GOTO notfound
Diskpart remove letter=$Source%
:notfound
Exit
Но этот черт : меня убивает :)
Я не работал с языком программирования, который не позволял бы подстраивать или разделять другую переменную. Помощь по этому синтаксису находится в команде SET. Откройте командную строку cmd и введите set /?.





Вам просто нужна подстрока %SystemReserved%
source=%SystemReserved:~0,1%
diskpart remove letter=%source%
Возможно, вам придется
setlocal enabledelayedexpansion
перед сценарием и
endlocal
в конце сценария
Спасибо всем, очень приятно видеть желающих помочь.
Я решил пойти по этому пути. Испытано и радость ---
FOR /F "tokens=2 usebackq delims= = " %i IN (`wmic volume where "Label='System Reserved'" get DriveLetter /format:list`) DO set SystemReserved=%i
SET SOURCE=SystemReserved
FOR /F "tokens=2 usebackq delims= = " %i IN (`wmic volume where "Label='System Reserved'" get DriveLetter /format:list`) DO set SystemReserved=%i
IF "%SOURCE%"= = "" GOTO notfound
Mountvol %SystemReserved% /d
:notfound
exit /b 0
зачем удалять двоеточие, если можно получить значение вообще без двоеточия? Просто добавьте : к разделителям:
FOR /F "tokens=2 usebackq delims=: = " %i in (`wmic volume where "Label='System Reserved'" get DriveLetter /value`) do set "SystemReserved=%i"
(Примечание: для использования в пакетном скрипте используйте %%i вместо %i. (все случаи))
(использование /value вместо /format:list является личным предпочтением — оба варианта вполне подходят)
Вот несколько ответов, дополняющих мой первоначальный комментарий. В них я добавил дополнительную безопасность, гарантируя, что тому с этой меткой выделена буква диска, и что он также идентифицирован как системный том.
Если вы хотите продолжать использовать diskpart.exe, то это можно сделать в одной строке, используя ненужное двоеточие в качестве разделителя:
For /F Tokens^=6^ Delims^=^": %G In ('%SystemRoot%\System32\wbem\WMIC.exe Volume Where "Not DriveLetter Is NULL And Label='System Reserved' And SystemVolume=TRUE" Get DriveLetter /Format:MOF 2^>NUL') Do @%SystemRoot%\System32\diskpart.exe Remove letter=%G
Поскольку теперь вы перешли на использование mountvol.exe, вы можете просто исключить разделитель ::
For /F Tokens^=6^ Delims^=^" %G In ('%SystemRoot%\System32\wbem\WMIC.exe Volume Where "Not DriveLetter Is NULL And Label='System Reserved' And SystemVolume=TRUE" Get DriveLetter /Format:MOF 2^>NUL') Do @%SystemRoot%\System32\mountvol.exe %G /d
Примечание. В приведенных выше ответах используется прямой ввод в cmd , как и в вашем собственном. Если вы хотите запустить их из пакетного файла, они будут выглядеть примерно так:
Дисковая часть:
@For /F Tokens^=6^ Delims^=^": %%G In ('%SystemRoot%\System32\wbem\WMIC.exe Volume Where "Not DriveLetter Is NULL And Label='System Reserved' And SystemVolume=TRUE" Get DriveLetter /Format:MOF 2^>NUL') Do @%SystemRoot%\System32\diskpart.exe Remove letter=%%G
МаунтВол:
@For /F Tokens^=6^ Delims^=^" %%G In ('%SystemRoot%\System32\wbem\WMIC.exe Volume Where "Not DriveLetter Is NULL And Label='System Reserved' And SystemVolume=TRUE" Get DriveLetter /Format:MOF 2^>NUL') Do @%SystemRoot%\System32\mountvol.exe %%G /d
Спасибо за руководство. я проверю это
Просто командный файл из трех строк:
@Set "SystemReserved = ",@For /F Tokens^=6^ Delims^=^" %%G In ('%SystemRoot%\System32\wbem\WMIC.exe Volume Where "Label='System Reserved'" Get DriveLetter /Format:MOF 2^>NUL') Do @Set "SystemReserved=%%G"и@If Defined SystemReserved %SystemRoot%\System32\diskpart.exe Remove letter=%SystemReserved:~,1%. Очевидно, что это нужно будет выполнять с повышением высоты.