пакетный скрипт для поиска буквы диска подключенного устройства - PullRequest
3 голосов
/ 19 апреля 2011

Я пытаюсь написать пакетный скрипт, чтобы найти определенное подключенное устройство.Я нахожусь в Windows 7.

Я знаю, что устройство будет иметь дисковод папки: \ custom, поэтому я хочу посмотреть на все возможности, чтобы найти устройство с этим путем

Здесьэто то, что у меня есть до сих пор

    @echo off
   setLocal Enabledelayedexpansion


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:\custom (
     ECHO Device Found : %%d
  )
)

Это не работает, хотя, он думает, что существует для каждой буквы диска .. поэтому я вижу «Device Found» для каждой буквы диска.Это почему?Я иду по этому поводу неправильно?Как я могу найти букву диска с папкой «custom» в корневом каталоге?

спасибо,
Stephanie

Ответы [ 6 ]

3 голосов
/ 19 апреля 2011

Используйте fsutil fsinfo drives внутри оператора for вместо статического списка букв дисков.

for /f "tokens=1,*" %%i in ('fsutil fsinfo drives') do (
  :: work with %%j here
)

Однако, если буква диска назначена устройству без носителя, оно может по-прежнему выдавать ошибку. В любом случае, чек, такой как:

if not exist O:\ @echo test

отлично работал для меня (с * 1011 и без). Диск не существует в моей системе, поэтому при удалении not вывод не выдавался.

1 голос
/ 06 июля 2014

Немного сложно, но это единственное решение, позволяющее избежать ошибок блокировки в Win7:

for /f "tokens=3" %%d in ('echo LIST Volume ^| DISKPART ^| findstr "Healthy Unusable"') do (
  if exist %%d:\custom echo Device found
)

Другой метод, который я нашел, - это использование команды vol + проверка ERRORLEVEL (если == 1 диск не смонтирован):

for /f "tokens=3" %%d in ('echo LIST Volume ^| DISKPART ^| findstr "Healthy Unusable"') do (
   vol %%d:
   if !ERRORLEVEL!==0 if exist %%d:\custom echo Device found
)

ПРИМЕЧАНИЕ: на WinXP DISKPART не увидит съемные диски ...

1 голос
/ 19 апреля 2011

Добавить \ в конце пути:

IF EXIST %%d:\custom\ (...)
0 голосов
/ 16 сентября 2014
@ECHO OFF
:CICLO
CLS&ECHO.&ECHO  VER ESTADO UNIDADES CON WMIC
SET "DVF="

FOR /F "tokens=1,*" %%A IN ('wmic logicaldisk get caption^, description ^| FIND ":"') DO (

   VOL %%A >nul 2>&1 && (
      CALL SET "DVF=%%DVF%% %%A"& ECHO   %%A ^| ON.  %%B) || (
      ECHO   %%A ^| OFF. %%B
   )
)   
ECHO  DEVICEFOUND: %DVF%
TIMEOUT /T 5 >NUL
GOTO:CICLO
0 голосов
/ 01 марта 2012

Это работает для жесткого диска и Pendrive:

@echo off
for  %%? 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 (
        dir %%?:\ > nul 2>nul
        if exist %%?:\custom echo Device found(s): %%?:\ 
)

P.S .: Запустить WinXP

0 голосов
/ 19 апреля 2011

Попробуйте это:

if exist %%d:\nul (
   echo Device found %%d
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...