CD к серийному номеру тома (VSN) в cmd - PullRequest
0 голосов
/ 01 декабря 2018

Вкратце, есть ли способ магическим образом использовать cd, следующий за серийным номером тома вместо буквы диска?

Как правило, когда я открываю командную строку и хочу перейти вдиск типа E: Я бы ввел следующую команду:

cd /d E:/

Я пишу пакетный скрипт для копирования файла на мою флешку, но у меня нет буквы диска.
Вместо этого у меня есть серийный номер тома, например: 123456

Я получаю букву диска из серийного номера тома командой wmic:

wmic LogicalDisk where VolumeSerialNumber=123456 get Name

вывод:

Name
E:

и наоборот:

wmic LogicalDisk where Name="E:" get VolumeSerialNumber

и вывод:

VolumeSerialNumber
123456

Итак, я должен сохранить эту возвращенную букву диска как wmic впеременной (в Shell я бы просто grep и сохранил бы ее, но я понятия не имею, как это сделать в командном файле) и перешел бы к тому, используя эту переменную, или я нашел способ напрямую перейти в том по его последовательномучисло как:

cd #123456#

и волшебным образом он идет на диск E:.

Я бы предварительноХотя я не использую wmic, так как запрашивать серийный номер тома слишком медленно, я знаю, что серийный номер моей флэш-накопителя является статическим и не будет меняться между системами.

Я хотел бы найти способ прямого перемещенияв том по серийному номеру.

Буду признателен за любую помощь.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Вот возможное решение.

@Echo Off
For /F "Delims=\" %%A In ('MountVol^|Find ":\"'
) Do Vol %%A 2>Nul|Find "XXXX-XXXX">Nul&&(CD /D %%A&GoTo :Next)
Exit /B

:Next
Echo Your current directory is %CD%
Pause

Вы, очевидно, замените код в :Next на свой конкретный код, а XXXX-XXXX на свой серийный номер с учетом регистра.

[Редактировать] Если все, что вы делаете, это копирование файла, то даже используя WMIC, вы сможете сделать это без изменения каталога:

@For /F Skip^=1 %%A In ('"WMIC LogicalDisk Where (VolumeSerialNumber='XXXXXXXX') Get DeviceID 2>Nul"') Do @For %%B In (%%A) Do @Copy "A File.ext" "%%B\"

Очевидно, вы изменили бы XXXXXXXX на серийный номер (без дефиса) и "A File.ext" на копируемый файл.

Аналогичным способом, используя FindМожно также использовать MountVol и Vol:

@For /F "Delims=\ " %%A In ('MountVol^|Find ":\"') Do @For /F %%B In ('Vol %%A 2^>Nul^|Find "XXXX-XXXX"') Do @Copy "A File.ext" "%%A\"
0 голосов
/ 01 декабря 2018

Если вы действительно знаете, что такое серийный номер тома (VSN) на флэш-накопителе USB (поскольку он создается каждый раз при форматировании тома), то здесь возможное решение:

@echo off

wmic LogicalDisk where VolumeSerialNumber="123456" get Name > VSN.txt
for /f "skip=1 delims=" %%A IN ('type VSN.txt') do @set "vsn=%%A"
set "diskletter=%vsn: =%"
del VSN.txt
cd /d %diskletter%
rem [do whatever you want]

Надеюсь, это поможет!

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