![]() |
Составление списка существуюих дисков + отсев дисков не имеющих ФС
Здравствуйте, столкнулся с такой проблемой: раньше я использовал вот такой вот скрипт для поиска файла с именем 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" или возможность отсеять диски не по ФС. Если у вас есть идеи по этому поводу, поделитесь ими. |
Решил я эту задачу. Все оказалось намного проще, чем я предполагал и весь текст скрипта уместился в одну строку:
Код:
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 |
тогда еще пара вариантов:
Код:
For /F "UseBackQ Skip=1" %%i In ( Код:
For /F "Tokens=3 Delims=:=" %%i In ( |
Да… Скобки при наборе «for /…», оказывается, могут использоваться одновременно и как операторные… Не знал :(. Спасибо!
|
Действительно проблема есть, 2 машины с кардридерами и на обеих вылез косяк
amel27, спасибо, супер! |
Я для подобной задачи использовал
echo list volume | diskpart его вывод подавал на for и проверял значение столбца файловой системы для поиска оптических приводов, или метки диска для поиска конкретной флешки |
Код:
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) Код:
@echo off |
Помогите побороть непонятную ситуацию, пробЫвал все коды для батника на этой странице и все у меня не срабатывают, запускаю код сценария в windows 7 с правами админа.
Цитата:
Хотя вот с такой командой проблем не возникает: Цитата:
|
Несколько слов по поводу скриптов товарища amel27:
1) двойные проценты %% вызывают ошибку 2) первый скрипт без них заработал нормально и то только в готовой системе, во время же автоматической установки не срабатывает, а вот второй вместо двоеточия в переменную diskroot к букве DVD-ROM добавляет -m, вместо Х: получается Х -m Господа скриптописатели, объясните в чём дело |
"не работает" потому, что setx инициализирует глобальную переменную, которая в уже существующей сессии недоступна
для обычного скрипта надо использовать обычный set |
Не понял который пост является решением и как его применить. Попробовал в AutoUnattend.xml pass="specialize" заменить первую строку второй.
Код:
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:\rootmark SETX DVD %i: -m |
Scratch56,
Код:
@echo off |
Scratch56, есть ли уверенность в работоспособности «wmic.exe» на этапе установки?
|
Цитата:
Нашел 2 решения: 1. отбор дисков с файловой системой CDFS Код:
For /F "tokens=3-5 delims= " %%i In ('cmd /c echo list volume ^| diskpart') Do If %%k==CDFS If Exist %%i:\DISKROOT.TXT SETX CDROM %%i: /M Код:
For /F "tokens=3,4 delims= " %%i In ('cmd /c echo list volume ^| diskpart') Do If %%j==WIN7-X86-32 If Exist %%i:\DISKROOT.TXT SETX CDROM %%i: /M |
Dmitry_K,
Добрый день, а допустим если мне нужно выполнять установку и СД и с ФЛЕШ носителей, при условии что метки дисков могут быть разные. И файловая система тоже соответственно. |
Вот еще вариант с отключение и последующим включением уведомления об ошибке.
Код:
Reg Add "HKLM\SYSTEM\CurrentControlSet\Control\Windows" /v "ErrorMode" /t REG_DWORD /d "0x00000002" /f |
Foreigner, А как Ваш многострочный вариант вставить в файл ответов?
|
Время: 04:26. |
Время: 04:26.
© OSzone.net 2001-