Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Составление списка существуюих дисков + отсев дисков не имеющих ФС

Ответить
Настройки темы
CMD/BAT - [решено] Составление списка существуюих дисков + отсев дисков не имеющих ФС

Новый участник


Сообщения: 13
Благодарности: 2

Профиль | Отправить PM | Цитировать


Здравствуйте, столкнулся с такой проблемой: раньше я использовал вот такой вот скрипт для поиска файла с именем usbroot.dsk на дисках и создания переменной %usbroot% с присвоением диска содержащего этот файл:
Код: Выделить весь код
for %i in (C D E F G H I J K L N M O P Q R S T U V W X Y Z) do if exist %i:\usbroot.dsk setx usbroot %i: -m
но если в компьютере присутствует картридер, то скрипт после обращения к букве диска картридера выдает окно ошибки:

В связи с этим я решил немного поправить скрипт. Суть такая: вместо перебора букв дисков, я хотел использовать только те диски, где существует ФС. Для этого я воспользовался командой:
Код: Выделить весь код
for /f "skip=1 tokens=1,2,*" %%i in ('wmic logicaldisk get caption^,filesystem') do ...
но отсеять диски по ФС у меня так и не получилось. Прошу, помогите разобраться в следующих вопросах:

1) Что, собственно, нужно дописать в скрипт, чтобы отсеять эти диски?
2) Каким способом передать список дисков (с ФС) в функцию поиска файла?

Возможно есть более рациональный способ нежели использование "wmic logicaldisk get caption,filesystem" или возможность отсеять диски не по ФС. Если у вас есть идеи по этому поводу, поделитесь ими.

Отправлено: 23:02, 28-04-2010

 

Новый участник


Сообщения: 13
Благодарности: 2

Профиль | Отправить PM | Цитировать


Решил я эту задачу. Все оказалось намного проще, чем я предполагал и весь текст скрипта уместился в одну строку:
Код: Выделить весь код
for /f "skip=1 tokens=1" %%i in ('wmic.exe logicaldisk get caption^,filesystem ^| find /v /i "          "') do if exist %%i\diskroot.txt setx diskroot %%i -m
Это сообщение посчитали полезным следующие участники:

Отправлено: 01:36, 29-04-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


тогда еще пара вариантов:

Код: Выделить весь код
For /F "UseBackQ Skip=1" %%i In (
`WMIC LogicalDisk Where "FileSystem LIKE '_%%'" Get Caption^|Find ":"`
) Do If Exist %%i\diskroot.txt SetX diskroot %%i -m
Код: Выделить весь код
For /F "Tokens=3 Delims=:=" %%i In (
'WMIC Path Win32_LogicalDiskRootDirectory Get GroupComponent'
) Do If Exist "%%i:\diskroot.txt" SetX diskroot %%i:" -m
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:57, 29-04-2010 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Да… Скобки при наборе «for /…», оказывается, могут использоваться одновременно и как операторные… Не знал . Спасибо!

Отправлено: 08:43, 29-04-2010 | #4


Аватара для Morpheus

Ветеран


Сообщения: 12426
Благодарности: 2328

Профиль | Отправить PM | Цитировать


Действительно проблема есть, 2 машины с кардридерами и на обеих вылез косяк
amel27, спасибо, супер!

Отправлено: 16:52, 28-01-2011 | #5


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Я для подобной задачи использовал
echo list volume | diskpart
его вывод подавал на for и проверял значение столбца файловой системы для поиска оптических приводов, или метки диска для поиска конкретной флешки
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:42, 28-01-2011 | #6


Аватара для conty9

Новый участник


Сообщения: 38
Благодарности: 30

Профиль | Цитировать


Код: Выделить весь код
for %i in (C D E F G H I J K L N M O P Q R S T U V W X Y Z) do if exist %i:\ (if exist "%%i:\usbroot.dsk setx usbroot %i: -m)
или проверка наличия файла с помощью команды Dir
Код: Выделить весь код
@echo off 
for %%i in (C D E F G H I J K L M N O P Q R S T U V W) do @Call:Search %%i 
exit 
:Search 
set var=1 
for /f "tokens=1" %%a in ('dir /d %1:\usbroot.dsk') do set var=%%a 
if %var% EQU 0 setx usbroot %1 & exit

Последний раз редактировалось conty9, 04-02-2011 в 18:04.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:23, 02-02-2011 | #7


Старожил


Сообщения: 183
Благодарности: 28

Профиль | Отправить PM | Цитировать


Помогите побороть непонятную ситуацию, пробЫвал все коды для батника на этой странице и все у меня не срабатывают, запускаю код сценария в windows 7 с правами админа.
Цитата:
@ECHO OFF
For /F "Tokens=3 Delims=:=" %%i In (
'WMIC Path Win32_LogicalDiskRootDirectory Get GroupComponent'
) Do If Exist "%%i:\diskroot.txt" SetX diskroot %%i:" -m
pause
start %DiskRoot%\install\FirstLogonCommands.cmd
exit
- появляется сообщение об каком-то успехе, буква диска определяется правильно, но файл так и не запускается, при чем в ошибке пишется правильный путь до файла, но программа его не видит по этому пути, что делать то с этим подскажите.

Хотя вот с такой командой проблем не возникает:
Цитата:
@ECHO OFF

SET DiskRoot=NULL

:SearchDiskRoot
FOR %%i 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 %%i:\DiskRoot.txt SET DiskRoot=%%i:

IF NOT "%DiskRoot%"=="NULL" GOTO StartSetup
GOTO SearchDiskRoot

:StartSetup
ECHO DiskRoot=%DiskRoot%

start %DiskRoot%\install\FirstLogonCommands.cmd
exit
Но как я понял со вторым кодом будут проблемы при установленно кардридере.

Последний раз редактировалось FreshMen85, 13-02-2011 в 20:17.


Отправлено: 19:48, 13-02-2011 | #8


Аватара для nemoi

Новый участник


Сообщения: 7
Благодарности: 1

Профиль | Отправить PM | Цитировать


Несколько слов по поводу скриптов товарища amel27:
1) двойные проценты %% вызывают ошибку
2) первый скрипт без них заработал нормально и то только в готовой системе, во время же автоматической установки не срабатывает, а вот второй вместо двоеточия в переменную diskroot к букве DVD-ROM добавляет -m, вместо Х: получается Х -m

Господа скриптописатели, объясните в чём дело

Последний раз редактировалось nemoi, 04-04-2011 в 15:05.


Отправлено: 18:35, 28-03-2011 | #9


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


"не работает" потому, что setx инициализирует глобальную переменную, которая в уже существующей сессии недоступна
для обычного скрипта надо использовать обычный set
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:50, 29-03-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Составление списка существуюих дисков + отсев дисков не имеющих ФС

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Службы - [решено] Не удалось подключиться к службе логических дисков", "Диспетчер логических дисков(LDM ТатьянаИ Microsoft Windows 2000/XP 3 29-12-2009 14:21
Мешанина из дисков Notsaint Ноутбуки 3 27-05-2009 13:05
HDD - Отключение дисков. exo Накопители (SSD, HDD, USB Flash) 2 12-03-2009 01:17
Название дисков Falcon1 Microsoft Windows 2000/XP 6 07-06-2003 15:20
записывание дисков Guest Microsoft Windows 2000/XP 14 18-10-2002 14:21




 
Переход