Справочный USB без буквы диска

314
corpico

У моих клиентов есть программа, которая размещена на флешке. Я хотел бы отправить обновление (MSI или EXE), которое удаляет один файл на диске и заменяет его другим.

На Mac это легко, так как все внешние диски имеют ссылки по имени и хранятся в одной папке (например, Volumes / MyDrive), но Windows использует буквы дисков (F: \ E: \), которые могут измениться, если у клиента есть какие-либо другие настройки или даже просто подключен другой диск.

Как я могу сослаться на целевую флешку, не используя (возможно неправильную) букву диска?

0
Попросите пользователя ввести букву диска для выполнения обновления. Или предоставьте пакетный файл, который они могут скопировать на флэш-диск, чтобы запустить обновление, так как пакетный файл может сообщить о диске, с которого он запускается. Ƭᴇcʜιᴇ007 7 лет назад 0
Я бы предпочел не заставлять пользователей выполнять какую-либо работу (если это возможно), поскольку большинство из них не разбираются в компьютерах. corpico 7 лет назад 0
Попробуйте `wmic LogicalDisk, где" DriveType = 2 или DriveType = 3 "получают DeviceID, DriveType, VolumeName, VolumeSerialNumber`, если вы можете идентифицировать свою флешку в выводе (или в выводе из` wmic LogicalDisk get / value`), тогда вы можете проанализируйте его, используя цикл `for / F`, чтобы получить букву диска. JosefZ 7 лет назад 1
Фантастическое решение! Большое спасибо @JosefZ! corpico 7 лет назад 0
Добро пожаловать. Не стесняйтесь дать свой собственный ответ, а затем подумайте о том, чтобы пометить его как принятый. [См. Эту страницу] (http://meta.stackexchange.com/questions/5234/) для объяснения того, почему это важно. JosefZ 7 лет назад 0

1 ответ на вопрос

0
corpico

См. Комментарий JosefZ для отличного однострочного решения для получения имен дисков в Windows.

В конце концов я использовал Java. Вот соответствующий код для дальнейшего использования:

FileSystemView fsv = FileSystemView.getFileSystemView(); File[] f = File.listRoots(); for(File file : f) System.out.println(fsv.getSystemDisplayName(file));