Показать полную графическую версию : [решено] Получить номер диска в переменную
SharkyEXE
02-04-2014, 19:14
Здравствуйте.
Нужно, чем проще, тем лучше, реализовать такое: при запуске файла надо вывести в переменную номер диска, в корне которого лежит файл 1
Типа как сделать diskpart -> list volume
Должно быть как-то так:
FOR %%d IN (c d e f g h i j k l m n o p q r s t u v w x y z) DO IF EXIST %%d:\1 SET CDROM=%%d:
Для диска, у которого CDROM=%%d:, нужно в переменную вывести номер диска
Спасибо.
Нужно, чем проще, тем лучше, реализовать такое: »
обязательно cmd? poweshell проще:
PS C:\Users\Alex> Get-WmiObject Win32_logicaldisk
DeviceID : C:
DriveType : 3
ProviderName :
FreeSpace : 49174024192
Size : 141008302080
VolumeName :
DeviceID : D:
DriveType : 3
ProviderName :
FreeSpace : 2002513920
Size : 2146430976
VolumeName : Volume
DeviceID : E:
DriveType : 5
ProviderName :
FreeSpace : 0
Size : 0
VolumeName : Audio CD
Foreigner
02-04-2014, 20:23
@echo off
setlocal
for /f "tokens=2 delims==" %%i in ('wmic cdrom get id /value') do call:set %%i
set cdrom_
goto:eof
:set
set /a cnt+=1
set cdrom_%cnt%=%1
SharkyEXE
03-04-2014, 06:27
@echo off
setlocal
for /f "tokens=2 delims==" %%i in ('wmic cdrom get id /value') do call:set %%i
set cdrom_
goto:eof
:set
set /a cnt+=1
set cdrom_%cnt%=%1 »
Здравствуйте. У меня Ваш код не работает. Создал файл 1.cmd, вставил туда целиком Ваш код, запустил файл 1.cmd и тишина
Кстати, а где в Вашем коде строка, для поиска в корне диска файла 1 и узнать букву этого диска?
Foreigner
03-04-2014, 07:38
не работает. »
Какая версия ОС?
SharkyEXE, Нужно именно с файлом в корне CD/DVD?
@echo off
setlocal
for /f "tokens=2 delims==" %%i in ('wmic cdrom get id') do if exist "%%i\1" set "cdrom=%%i"
echo %cdrom%
SharkyEXE
03-04-2014, 19:37
Какая версия ОС?
microsoft windows xp home sp3
Нужно именно с файлом в корне CD/DVD?
В принципе, путь любой, как Вам удобно
Только если у меня вставлено 3 100%но одинаковые флешки:
1) с одинаковыми именами (например, Вася)
2) с одинаковыми размерами (например, 32 гигабайта каждая)
то только по нужному файлу-метке 1 найдется нужная мне флешка и для нее надо определить номер
Даже фиксированная буква флешки не пойдет - на разных пк буква может меняться
Вот поэтому мне и надо найти файл-маркер 1 и где находится этот файл-маркер 1 для этого диска узнать номер
1) На диске C:\ я создал файл 1.cmd с кодом
setlocal
for /f "tokens=2 delims==" %%i in ('wmic cdrom get id') do if exist "%%i\1" set "cdrom=%%i"
echo %cdrom%
pause
2) Запустил файл C:\1.cmd
3) Вот такое окно получил: http://yadi.sk/d/zKgpg8XlLk6w7
Спасибо
Только если у меня вставлено 3 100%но одинаковые флешки »
Гмм… SharkyEXE, флэшка у Вас определяется именно как CD-ROM?
SharkyEXE
03-04-2014, 20:11
Гмм… SharkyEXE, флэшка у Вас определяется именно как CD-ROM? »
Извините меня, пожалуйста, а кто Вам такое сказал?
Если Вы по поводу кода:
FOR %%d IN (c d e f g h i j k l m n o p q r s t u v w x y z) DO IF EXIST %%d:\1 SET CDROM=%%d:
в котором указано название переменной CDROM, то вместо названия переменной CDROM может быть любое название, хоть Вася, хоть Петя...
Флешка у меня новая, купил в магазине, принес домой, раздербанил новую коробочку, в которую была упакована флешка, вставил флешку в комп и все.
Метка флешки - TRANSCEND
В плане никакими сторонними утилитами я не разбивал флешку, никаких виртуальных сиди-ромов я не делал на флешке
Спасибо.
Извините меня, пожалуйста, а кто Вам такое сказал?
Если Вы по поводу кода: »
Именно. И последующего кода (за исключением #2). Было бы странно, если бы он у Вас заработал, будучи ориентирован на CD-ROM.
Лучше ориентироваться на серийный номер, наподобие:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq skip=1 delims=" %%i in (
`wmic.exe LogicalDisk where "VolumeSerialNumber='533E46DF'" get Name 2^>nul`
) do for %%j in (%%i) do set sName=%%j
if defined sName echo [%sName%]
endlocal
exit /b 0
Здесь не номер, а буква логического диска. Дайте пояснения по поводу номера.
SharkyEXE
03-04-2014, 21:36
Например, файл маркер 1 находится в корне флешки, флешка имеет букву Е
Делаю Пуск -> Выполнить -> CMD
Появляется окно консоли, пишу diskpart, нажимаю Enter
Пишу list volume, нажимаю Enter
Появляется таблица, нахожу строку, где написано буква диска Е
И смотрю, какой Том 1 или Том 2 или Том 3 или другая цифра соответствует диску который имеет букву Е, в корне которого лежит файл-маркер 1
Вот цифра Том мне и нужна
Спасибо
Foreigner
03-04-2014, 22:50
Цитата SharkyEXE:
microsoft windows xp home sp3
Там нет wmic, увы
И смотрю, какой Том 1 или Том 2 или Том 3 или другая цифра соответствует диску который имеет букву Е, в корне которого лежит файл-маркер 1
Вот цифра Том мне и нужна
@echo off
setlocal
for /f "tokens=2,3" %%i in (' "echo list volume | diskpart" ') do (
if exist "%%j:\1" set "num=%%i"
)
echo %num%
SharkyEXE
04-04-2014, 06:27
@echo off
setlocal
for /f "tokens=2,3" %%i in (' "echo list volume | diskpart" ') do (
if exist "%%j:\1" set "num=%%i"
)
echo %num% »
Огромное Вам спасибо, код 100% рабочий.
Только вот, извините меня, пожалуйста, я про это не знал, я думал, что diskpart -> list volume и Управление дисками это одно и тоже
Файл-маркер 1 лежит в корне флешки с буквой E и меткой TRANSCEND
В diskpart -> list volume у меня такой скриншот: http://yadi.sk/d/CdMOWYcNLmAfS
В Управление дисками у меня такой скриншот: http://yadi.sk/d/nh3jr3CILmAfU
То есть в diskpart -> list volume для флешки (Файл-маркер 1 лежит в корне флешки с буквой E и меткой TRANSCEND) номер тома 2
А в Управление дисками для флешки (Файл-маркер 1 лежит в корне флешки с буквой E и меткой TRANSCEND) номер тома 1
Выделено красными прямоугольниками на скриншотах про разные цифры томов для одной и той же флешки (Файл-маркер 1 лежит в корне флешки с буквой E и меткой TRANSCEND)
Ваш код
@echo off
setlocal
for /f "tokens=2,3" %%i in (' "echo list volume | diskpart" ') do (
if exist "%%j:\1" set "num=%%i"
)
echo %num% »
выдает цифру 2 для моей флешки (Файл-маркер 1 лежит в корне флешки с буквой E и меткой TRANSCEND): http://yadi.sk/d/9dAgMcKnLmAmz
Это все правильно.
Однако, пожалуйста, если у Вас есть время, возможность, желание - сделайте так, чтобы номер флешки (Файл-маркер 1 лежит в корне флешки с буквой E и меткой TRANSCEND) искался не для diskpart -> list volume, а для Управление дисками
То есть чтобы Ваш код выдавал не 2, а 1.
Спасибо.
Еще раз извините меня, пожалуйста, век живи, век учись, теперь я буду знать, что diskpart -> list volume и Управление дисками выдают разные цифры тома для одной и той же флешки
SharkyEXE, может, Вы ещё скажете, для чего Вам нужен «номер диска»?
SharkyEXE
04-04-2014, 06:44
SharkyEXE, может, Вы ещё скажете, для чего Вам нужен «номер диска»? »
Вот для этого: http://www.nearthebridge.com/gruzimsya-s-fleshki-v-virtualbox/
С пункта 1 до пункта 2 прочитайте, пожалуйста.
Спасибо.
SharkyEXE, спасибо, ясно.
Читать, правда, надо вообще-то п.2:
http://img812.imageshack.us/img812/186/6p7l.png
Поскольку у Вас нет «wmic.exe», то WSH (с учётом соответствия «логический диск» → «раздел» → «физический диск»):
Option Explicit
Dim objSWbemObjectEx
With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
For Each objSWbemObjectEx In .ExecQuery("SELECT * FROM Win32_LogicalDisk WHERE VolumeSerialNumber = '533E46DF'")
Exit For
Next
For Each objSWbemObjectEx In objSWbemObjectEx.Associators_(,"Win32_DiskPartition")
Exit For
Next
For Each objSWbemObjectEx In objSWbemObjectEx.Associators_(,"Win32_DiskDrive")
Exit For
Next
WScript.Echo objSWbemObjectEx.DeviceID
End With
WScript.Quit 0
Для использования внутри пакетного файла использовать в качестве хоста WSH «cscript.exe» в виде:
cscript.exe //nologo <Путь\имя.vbs>
SharkyEXE
04-04-2014, 16:54
Iska
Извините меня, пожалуйста, за, возможно, мою наглость, а нельзя ли попроще код, например как здесь http://forum.oszone.net/post-2332804-11.html но только, чтобы было для Управление дисками, чтобы цифра 1 в переменной была, а не 2?
Спасибо.
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq" %%i in (
`cscript.exe //nologo "%~dp0GetPhysycalDriveBySerialNumber.vbs"`
) do set sPhysycalDrive=%%i
if defined sPhysycalDrive echo [%sPhysycalDrive%]
endlocal
exit /b 0
Файл «GetPhysycalDriveBySerialNumber.vbs», содержащий код из предыдущего поста, предполагается расположенным в том же каталоге, что и пакетный файл («%~dp0»).
SharkyEXE
04-04-2014, 18:06
Iska
Извините меня, пожалуйста, а возможно сделать отвязку от серийного номера и сделать привязку к поиску файла-маркера 1 в корне диска?
Просто лень заморачиваться с серийным номером, привычнее как-то файл-маркер...
Можно. Но не нужно. Ибо «заморачиваться» с серийным номером не придётся. Достаточно однократно выполнить команду «dir» для Вашей флэшки и использовать полученную информацию:
Серийный номер тома: 533E-46DF
без дефиса. Вплоть до её переформатирования.
SharkyEXE
04-04-2014, 19:25
Можно. Но не нужно. Ибо «заморачиваться» с серийным номером не придётся. Достаточно однократно выполнить команду «dir» для Вашей флэшки и использовать полученную информацию: »
Все таки можно, пожалуйста, оочень хочется, чтобы без серийного номера, чтобы по файлу-маркеру 1 в корне флешки работало?
Спасибо.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.