Как я могу получить букву диска, выполнив поиск по имени USB с помощью команды Windows или Node.js / Electron? - PullRequest
1 голос
/ 06 августа 2020

Я хочу загрузить контент на USB-диск, названный в фоновом режиме. Поэтому мне нужно найти его позицию. Есть ли какая-либо функция для реализации этого с помощью команды Windows?

Или есть какая-либо функция для поиска USB-накопителя с помощью Node.js / Electron?

И если это возможно , как отличить guish между двумя USB-накопителями с одинаковыми именами?

1 Ответ

0 голосов
/ 07 августа 2020

Можно использовать %~d0 для ссылки на диск командного файла, если командный файл хранится на носителе, подключенном через USB к компьютеру.

Но если командный файл хранится на другой носитель данных, такой как локальный жесткий диск внутри P C, следующие небольшие пакетные файлы демонстрируют, как получить букву диска USB-накопителя через имя тома.

@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "DriveUSB="
set "VolumeName=NameOfVolume"
:GetDriveLetter
for /F "tokens=2 delims==" %%I in ('%SystemRoot%\System32\wbem\wmic.exe LOGICALDISK where VolumeName^="%VolumeName%" GET DeviceID /VALUE 2^>nul') do set "DriveUSB=%%I"
if not defined DriveUSB (
    echo Device with name %VolumeName% not found.
    echo/
    %SystemRoot%\System32\choice.exe /C YN /N /M "Retry (Y/N):"
    if errorlevel 2 goto :EOF
    goto GetDriveLetter
)
echo Drive letter of %VolumeName% is: %DriveUSB%
rem More commands using environment variable DriveUSB.
echo/
pause
endlocal

NameOfVolume должно быть адаптировано к настоящему имени тома. Эта строка интерпретируется без учета регистра WMI C.

Пожалуйста, прочтите документацию Microsoft для Win32_LogicalDisk class и его свойств для получения дополнительной информации об используемом классе.

Идентификация устройства также может быть выполнена с использованием VolumeSerialNumber вместо VolumeName, которое сложнее изменить, чем имя тома без форматирования тома. Запустите в окне командной строки следующую команду, чтобы отобразить серийный номер тома:

wmic LOGICALDISK where VolumeName="NameOfVolume" GET VolumeSerialNumber

Чтобы понять используемые команды и то, как они работают, откройте окно командной строки , выполните там следующие команды, и внимательно прочитайте все страницы справки, отображаемые для каждой команды.

  • choice /?
  • echo /?
  • endlocal /?
  • for /?
  • goto /?
  • if /?
  • pause /?
  • rem /?
  • setlocal /?
  • wmic /?
  • wmic logicaldisk /?
  • wmic logicaldisk get /?

Прочтите документацию Microsoft о Использование операторов перенаправления команд для объяснения 2>nul. Оператор перенаправления > должен быть экранирован символом вставки ^ в командной строке FOR , чтобы интерпретироваться как буквальный символ, когда интерпретатор команд Windows обрабатывает эту командную строку перед выполнением команды FOR который выполняет встроенную командную строку wmic в отдельном командном процессе, запущенном в фоновом режиме с %ComSpec% /c и командной строкой в ​​', добавленной в качестве дополнительных аргументов. Это также причина, по которой = необходимо экранировать с помощью ^, чтобы интерпретировать как буквальный символ, а не как разделитель аргументов, который в противном случае был бы заменен символом пробела экземпляром командного процессора, обрабатывающим пакетный файл, создавая предложение where недопустимо для wmic, выполняемого фоновым командным процессом.

Рекомендуется также прочитать топи форума DosTips c: ECHO. НЕ ОТКАЗЫВАЕТСЯ ввести текст или пустую строку - вместо этого используйте ECHO /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...