Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/41: Рейтинг темы: голосов - 41, средняя оценка - 4.93
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299

Определение буквы диска по его номеру из лога, создаваемого DiskPart

12.02.2014, 21:30. Показов 7834. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Лог diskpart:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
Microsoft DiskPart version 6.1.7601
Copyright (C) 1999-2008 Microsoft Corporation.
On computer: HP-ENG-03
 
  Disk ###  Status         Size     Free     Dyn  Gpt
  --------  -------------  -------  -------  ---  ---
  Disk 0    Online          298 GB  5120 KB
  Disk 1    No Media           0 B      0 B
  Disk 2    No Media           0 B      0 B
  Disk 3    No Media           0 B      0 B
  Disk 4    No Media           0 B      0 B
  Disk 5    No Media           0 B      0 B
  Disk 6    Online           29 GB      0 B
Disk 6 это флешка. Как определить ее имя (букву диска) в системе?

Добавлено через 2 минуты
Собственно для чего это нужно:
человек вставляет флешку в комп, запускает батник, он размечает флешку посредством diskpart и потом копирует на нее нужные файлы (создание загрузочной флешки).

Так вот я его после запуска скрипта спрошу номер диска. А как потом узнать какая буква соответствует этому диску.

Ну или можно наоборот: спросить букву диска, но как потом узнать его номер в diskpart?

Спасибо.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.02.2014, 21:30
Ответы с готовыми решениями:

Определение буквы съемного диска(флэшки) по имени или серийному номеру (без WMIC). Простой способ
Интересовался данной темой и что-то в гугле не нашел (мож забанили). Сегодня осенило: Поиск по имени: set...

Определение города по его номеру
Если в ссылке, по которой зашел посетитель есть utm метка с - utm_campaign=777, где цифры региона, то по этой цифре нужно вывести название...

Определение буквы диска
Добрый день, форумчане. Есть задача определить букву локального диска, следующего после системного диска. Пока есть следующий код: for...

16
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
13.02.2014, 00:23
Лучший ответ Сообщение было отмечено Eva Rosalene как решение

Решение

Через классы:
Win32_DiskDriveToDiskPartition
Win32_LogicalDiskToPartition

Пример взят из :
Получение серийного номера всех съемных устройств и физических жестких дисков (не разделов).
Получение имен разделов физических накопителей (кроме оптических).


Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@echo off
Setlocal EnableDelayedExpansion EnableExtensions
 
set disknum=6
Call :GetPartition "\\.\PHYSICALDRIVE%disknum%" Drives
echo Disk Number - %disknum%. Drive - %Drives%
 
pause& goto :eof
 
::Конвертация PhysicalDrive Name -> Partition Names -> Drive Names
  :GetPartition %1.in-PhysicalDrive_Name %2-out.Drive_Names
  Set "%~2="
  For /F "skip=2 delims==, tokens=3,6-7" %%i In (
    'WMIC path Win32_DiskDriveToDiskPartition get /format:csv'
  ) do (
    if %%i=="%~1" (
      For /F "skip=2 delims==, tokens=3-4,7" %%I In (
        'WMIC path Win32_LogicalDiskToPartition get Antecedent^,Dependent /format:csv'
      ) do (
        if "%%I,%%J"=="%%j,%%k" Set "%~2=!%~2! %%K"
  )))
Exit /B
2
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299
13.02.2014, 19:04  [ТС]
Хм... идею понял. Но у меня под 7-кой не работает.
У wmic нет такого параметра как /format
И чет я торможу: как добавить в delims кавычки?

Вот так у меня выглядит результат работы WMIC path Win32_DiskDriveToDiskPartition get
Code
1
2
3
Antecedent                                                            Dependent                                                                    
\\HP-ENG-03\root\cimv2:Win32_DiskDrive.DeviceID="\\.\PHYSICALDRIVE0"  \\HP-ENG-03\root\cimv2:Win32_DiskPartition.DeviceID="Disk #0, Partition #0"  
\\HP-ENG-03\root\cimv2:Win32_DiskDrive.DeviceID="\\.\PHYSICALDRIVE6"  \\HP-ENG-03\root\cimv2:Win32_DiskPartition.DeviceID="Disk #6, Partition #0"
Вот так WMIC path Win32_LogicalDiskToPartition get Antecedent,Dependent:
Antecedent Dependent
Code
1
2
\\HP-ENG-03\root\cimv2:Win32_DiskPartition.DeviceID="Disk #0, Partition #0"  \\HP-ENG-03\root\cimv2:Win32_LogicalDisk.DeviceID="C:"
\\HP-ENG-03\root\cimv2:Win32_DiskPartition.DeviceID="Disk #6, Partition #0"  \\HP-ENG-03\root\cimv2:Win32_LogicalDisk.DeviceID="K:"
Добавлено через 19 минут
Если кому-то будет полезно, то... разобрался.
Это баг Win7.

формат нужно прописывать следующим образом: /format:"%WINDIR%\system32\wbem\en-us\csv.xsl"

Теперь не понятно как сделать так, чтобы скрипт был универсальным. И для ХР и для 7-ки.

Добавлено через 13 минут
Ну собственно решил вопрос парсингом того что есть, без формата csv, но баг при этом остается быть багом.
Так что будьте внимательны.
1
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
13.02.2014, 19:46
У меня на Win 7 прекрасно в /format csv все идет...
0
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299
13.02.2014, 20:13  [ТС]
Значит csv.xsl доступен через PATH, ИМХО.
У меня винда под доменом, по этому если у меня не работало, то и у всех в конторе не будет...
0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
13.02.2014, 22:50
Кстати... это получается, создав свой xsl-файл, можно в каком угодно формате выдавать? Надо будет проверить.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
13.02.2014, 22:52
Borodа, та ну... это что за винда такая... Пример был как раз для 7-ки.
Можно получить у Вас дополнительные тесты?

Это очень странно.
Перечень доступных форматов должен быть такой

CSV
HFORM
HMOF
HTABLE
HXML
LIST
RAWXML
TABLE
VALUE
htable-sortby
htable-sortby.xsl
texttablewsys
texttablewsys.xsl
wmiclimofformat
wmiclimofformat.xsl
wmiclitableformat
wmiclitableformat.xsl
wmiclitableformatnosys
wmiclitableformatnosys.xsl
wmiclivalueformat
wmiclivalueformat.xsl


Вывод от таких команд что показывает?

Bash
1
2
WMIC path Win32_DiskDriveToDiskPartition get /format /?
WMIC path Win32_LogicalDiskToPartition get /format /?
0
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299
13.02.2014, 22:58  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
Вывод от таких команд что показывает?
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Keyword/XSL filename to process XML results.
USAGE:
 
/FORMAT:<format specifier>
NOTE: <formatspecifier> : ((<transformname>|<transformname> : <paramstring>)[,<formatspecifier>]).
where <paramstring>:((<parametername>=<value>)[:<paramstring>]).
 
NOTE: <transformname> is a <key word> or an <xsl file name>.
 
Keywords:
 
CSV
HFORM
HTABLE
LIST
MOF
RAWXML
TABLE
VALUE
XML
htable-sortby
htable-sortby.xsl
texttablewsys
texttablewsys.xsl
wmiclimofformat
wmiclimofformat.xsl
wmiclitableformat
wmiclitableformat.xsl
wmiclitableformatnosys
wmiclitableformatnosys.xsl
wmiclivalueformat
wmiclivalueformat.xsl
Добавлено через 1 минуту
А вот что выдает команда WMIC path Win32_DiskDriveToDiskPartition get /format:csv
Code
1
Invalid XSL format (or) file name.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
13.02.2014, 23:33
Borodа, не сложно будет сформировать для меня папочку с такой инфой?

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
SetLocal EnableExtensions
set cur=%~dp0
set out=%cur%\wmi_test
rd /s /q "%out%" 2>NUL
md "%out%" 2>NUL
wmic /output:"%out%\wmi_table.txt"   path Win32_DiskDriveToDiskPartition get /format:table 2>"%out%\wmi_err_table.txt"
wmic /output:"%out%\wmi_list.txt"    path Win32_DiskDriveToDiskPartition get /format:list  2>"%out%\wmi_err_list.txt"
wmic /output:"%out%\wmi.csv"         path Win32_DiskDriveToDiskPartition get /format:csv   2>"%out%\wmi_err_csv.txt"
wmic /output:"%out%\wmi.xml"         path Win32_DiskDriveToDiskPartition get /format:xml   2>"%out%\wmi_err_xml.txt"
wmic /output:"%out%\wmi_hform.html"  path Win32_DiskDriveToDiskPartition get /format:hform 2>"%out%\wmi_err_hform.txt"
wmic /output:"%out%\wmi_htable.html" path Win32_DiskDriveToDiskPartition get /format:htable  2>"%out%\wmi_err_htable.txt"
Set xOS=x64& If "%PROCESSOR_ARCHITECTURE%"=="x86" If Not Defined PROCESSOR_ARCHITEW6432 Set xOS=x32
echo %xOS%> "%out%\Core.txt"
wmic os get /format:list > "%out%\System.txt"
set > "%out%\Environment.txt" 
xcopy /C /E /H /R /Y /I /K "%SystemRoot%\system32\wbem" "%out%\wbem"
pause
и залить на rghost.ru
0
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299
14.02.2014, 00:20  [ТС]
Dragokas, в личке
2
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
14.02.2014, 00:35
Borodа, решение на языке VBScript будет приемлемо?
0
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299
14.02.2014, 00:40  [ТС]
Dragokas, ну скажем так... я уже все сделал, т.е. я парсю те строчки, что выдает wmic без форматирования.

Но не отказался бы посмотреть на решение на VBScript. Т.к. я в нем вообще не силен.

Добавлено через 2 минуты
Да, применительно к моей ситуации получилось вот так:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
Setlocal EnableDelayedExpansion EnableExtensions
 
set disknum=6
Call :GetPartition "\\.\PHYSICALDRIVE%disknum%" Drives
echo Disk Number - %disknum%. Drive - %Drives%
 
pause& goto :eof
 
:GetPartition %1.in-PhysicalDrive_Name %2-out.Drive_Names
  Set "%~2="
  For /F "skip=1 tokens=2,5 delims==, " %%i In ('WMIC path Win32_DiskDriveToDiskPartition get') do (
    if %%i=="%~1" (
        For /F "skip=1 tokens=3,7 delims==, " %%1 In ('WMIC path Win32_LogicalDiskToPartition get Antecedent^,Dependent') do (
          if %%j==%%1 Set "%~2=%%2"
        )
    )
  )
exit /b
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
14.02.2014, 01:02
Содержимое батника:

Bash
1
2
3
4
5
6
7
@echo off
SetLocal EnableExtensions
 
set DriveNum=0
 
For /F %%a in ('cscript //nologo "%~dp0\Get_Drive_by_Physical_Number.vbs" %DriveNum%') do echo %%a
pause
Содержимое Get_Drive_by_Physical_Number.vbs

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DiskNum = WScript.Arguments(0)
 
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
 
For Each oDisk In objWMIService.ExecQuery("Select * From Win32_DiskDriveToDiskPartition")
    if instr(1, oDisk.Antecedent, "PHYSICALDRIVE" & DiskNum & """", vbtextcompare) <> 0 then 
        VolumeID = split(oDisk.Dependent, """")(1)
        For Each oVolume In objWMIService.ExecQuery("Select * From Win32_LogicalDiskToPartition")
            if instr(1, oVolume.Antecedent, VolumeID, vbtextcompare) <> 0 then
                WScript.Echo split(oVolume.Dependent, """")(1)
            end if
        Next
    end if
Next
0
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299
14.02.2014, 01:05  [ТС]
и тишина...

Запускаю скрипт cscript Get_Drive_by_Physical_Number.vbs 0
и ...
Code
1
2
3
4
5
6
T:\>cscript Get_Drive_by_Physical_Number.vbs 0
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.
 
 
T:\>
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
14.02.2014, 01:09
Borodа, я от Вашего варианта в последний момент отказался, подумав - а вдруг в имени домена окажется знак запятой, тогда номера токенов сместятся.

Но вариант тоже хороший.

Добавлено через 3 минуты
Цитата Сообщение от Borodа Посмотреть сообщение
Запускаю скрипт cscript Get_Drive_by_Physical_Number.vbs 0
и ...
Уже не прикольно
Можете сделать такой вывод, чтобы понять:
Bash
1
cscript Debug.vbs > Debug.txt
Debug.vbs
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
 
For Each oDisk In objWMIService.ExecQuery("Select * From Win32_DiskDriveToDiskPartition")
    WScript.Echo oDisk.Antecedent
    WScript.Echo oDisk.Dependent
Next
For Each oVolume In objWMIService.ExecQuery("Select * From Win32_LogicalDiskToPartition")
    WScript.Echo oVolume.Antecedent
    WScript.Echo oVolume.Dependent
Next
0
101 / 95 / 8
Регистрация: 07.08.2013
Сообщений: 299
14.02.2014, 01:11  [ТС]
Цитата Сообщение от Dragokas Посмотреть сообщение
Можете сделать такой вывод
Code
1
2
3
4
5
6
7
8
9
10
11
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.
 
\\HP-ENG-03\root\cimv2:Win32_DiskDrive.DeviceID="\\\\.\\PHYSICALDRIVE0"
\\HP-ENG-03\root\cimv2:Win32_DiskPartition.DeviceID="Disk #0, Partition #0"
\\HP-ENG-03\root\cimv2:Win32_DiskDrive.DeviceID="\\\\.\\PHYSICALDRIVE6"
\\HP-ENG-03\root\cimv2:Win32_DiskPartition.DeviceID="Disk #6, Partition #0"
\\HP-ENG-03\root\cimv2:Win32_DiskPartition.DeviceID="Disk #0, Partition #0"
\\HP-ENG-03\root\cimv2:Win32_LogicalDisk.DeviceID="C:"
\\HP-ENG-03\root\cimv2:Win32_DiskPartition.DeviceID="Disk #6, Partition #0"
\\HP-ENG-03\root\cimv2:Win32_LogicalDisk.DeviceID="J:"
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
14.02.2014, 01:28
Должно по идее все работать.
Попробуйте запускать так:
Bash
1
cscript Get_Drive_by_Physical_Number.vbs "0"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.02.2014, 01:28
Помогаю со студенческими работами здесь

Определение буквы жесткого диска
мне нужно скопировать файл,но я не знаю какой там может быть локальный диск (буква) например ...

Определение жесткого диска (буквы)
нужно записать в пути копирования автоопределение локального диска с Windows , помогите кто может с кодом не могу вписать function...

Определение дня недели по его номеру в году
Здравствуйте! Подскажите, пожалуйста, как определить день недели k дня в году и вывести его название в консоль? Например, мне надо...

Определение буквы диска по хэндлу устройства
День добрый, второй день копаюсь, в инете часто встречается код нахождения флешек для последующего их извлечения: hDevInfoSet :=...

Определение буквы съемного диска(флэшки) без WMIC. Простой способ
Интересовался данной темой и что-то в гугле не нашел (мож забанили). Сегодня осенило: Поиск по имени: set...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru