Найти текущий номер тома diskpart в .bat

Используя сценарий .bat на USB-накопителе, я хотел бы изменить букву диска без использования стороннего программного обеспечения и каких-либо требований к системе, к которой подключен USB, за исключением того, что это Windows XP или выше.

Чтобы получить текущую букву диска, я использую

установить ПРИВОД=%~dp0

Что такое E: например

Прежде чем я смогу изменить букву диска E:, как мне автоматически узнать номер тома в списке томов diskpart?

выберите том E:

очевидно, что это не сработает, вы можете использовать только n для номера диска.

РЕДАКТИРОВАТЬ:

Спасибо @wOxxOm за решение. Вот мой последний скрипт .bat, который я сейчас использую для автоматического изменения буквы диска, на котором находится скрипт, на U:\

@echo off
set DRIVERAW=%~dp0
set DRIVE=%DRIVER:~0,1%
if %DRIVE%==U exit
for /f "tokens=2,3" %%a in ('echo list volume ^| diskpart') do (
    if %%b==%DRIVE% set VOLNO=%%a
)
del %DRIVERAW%\diskpart.txt
echo select volume %VOLNO% > %DRIVERAW%\diskpart.txt
echo assign letter=U >> %DRIVERAW%\diskpart.txt
echo ^G
diskpart /s %DRIVERAW%\diskpart.txt
exit

Вы можете заменить две буквы U на любую другую букву диска, которую хотите, если она не должна быть подключена к U:\

Просто будьте уверены, что на U:\ еще ничего не смонтировано.


person RapidFireArts    schedule 25.08.2015    source источник
comment
По-видимому, дублировать, если вопрос касается только поиска буквы диска.   -  person wOxxOm    schedule 25.08.2015
comment
@wOxxOm Пожалуйста, прочитайте, прежде чем говорить, что это дубликат, я уже прочитал все о поиске букв дисков, но это не мой вопрос. Я знаю букву диска, но мне нужен номер тома, используемый в diskpart.   -  person RapidFireArts    schedule 25.08.2015
comment
@wOxxOm извините, но я не понимаю, как это работает. я пытался запустить echo list volume | diskpart в файле bat и в cmd вручную, но все, что он делает, это открывает diskpart. я не знаком с синтаксическим анализом выходных данных с использованием for /f, хотя я много использовал cmd раньше:/   -  person RapidFireArts    schedule 25.08.2015


Ответы (2)


Разберите список томов, который выглядит следующим образом:

Том 6 E MY_USB FAT32 Съемный 971 МБ Исправен

Запустите в командной строке с повышенными привилегиями или щелкните правой кнопкой мыши файл .bat и запустите от имени администратора.

for /f "tokens=2,3" %%a in ('echo list volume ^| diskpart') do (
    if %%b==E echo Volume number is %%a
)

Вы также можете проверить по имени тома (используйте tokens=2,4) или по типу тома (используйте tokens=2,6), потребуется небольшая хитрость с номерами токенов, если имя тома содержит пробелы.

person wOxxOm    schedule 25.08.2015
comment
спасибо за ваш быстрый ответ, но он по-прежнему только открывает окно diskpart, и ничего не происходит (закрытие ничего не возвращает, и скрипт завершается). это не должно отличаться для Windows 10 от любой другой версии, но может ли это быть проблемой? это свежая установка. извините за то, что так проблематично... script точно @echo off NL for /f "tokens=2,3" %%a in ('echo list volume ^| diskpart') do ( NL if %%b==U echo Volume number is %%a NL ) NL pause (NL - следующая строка) - person RapidFireArts; 25.08.2015
comment
Запустите echo list volume | diskpart в командной строке и сравните вывод со ссылкой в ​​ответе. - person wOxxOm; 25.08.2015
comment
У меня нет точного синтаксиса под рукой, но может быть лучше, если вы попытаетесь получить эту информацию с помощью wmic - person Marged; 25.08.2015
comment
@Marged, да, но я слышал, что WMIC может быть отключен/нефункционален, особенно на старых XP. Во всяком случае, я не вижу порядковый номер тома, подходящий для diskpart, в выводе wmic logicaldisk get - person wOxxOm; 25.08.2015
comment
@wOxxOm о, ладно, я попытался запустить cmd с повышенными правами, и теперь это работает, извините, я знаю, что мне нужны права администратора, чтобы изменить букву диска, но я не пытался получить номер тома. большое спасибо, я опубликую свое решение здесь, когда закончу создание скрипта. - person RapidFireArts; 26.08.2015
comment
@wOxxOm Еще один вопрос: этот метод может запутаться из-за других букв в метках томов или он ищет только внутри столбцов Ltr? - person RapidFireArts; 26.08.2015
comment
Строки начинаются с Volume Number Letter Label, поэтому буквенный токен всегда является третьим, а метка тома является (или начинается с) четвертым токеном, но может охватывать большее количество токенов (5-й и т. д.), если в нем есть пробелы. - person wOxxOm; 26.08.2015

Третья строка в пакетном файле, set DRIVE=%DRIVER:~0,1% должна быть, set DRIVE=%DRIVERAW:~0,1%

С этим изменением это работает для меня.

person Dana Longever    schedule 23.02.2021