Собственно, прошу откликнутся, тех кто знает как и умеет. Нужен батник с одной-единственной функцией: пользователю предлагается ввести с клавиатуры букву диска его (т.е. пользователя) флешки в системе и присвоить это значение определённой переменной ( в идеале - чтобы проводилась проверка на допустимое значение, буква может быть только в интервале g-z, при выборе другого значения выводится предупреждение!) Батник, который присваивает значение сам, запущенный с флешки, не устраивает по многим причинам. Заранее спасибо
@echo off :reEnter Set /p letter="Enter disk letter: " Set letter=%letter:~0,1% For %%i in ( A a B b C c D d E e F f ) do If %%i==%letter% goto:reEnter
:continue Set letter=%letter%: Echo Your choice is "%letter%"
Echo Current drive is "%CD:~0,2%"
set path_to_current_bat=%~dp0 Echo Disk with this bat file is "%path_to_current_bat:~0,2%"
Обратите внимание, что бы при копировании в конце команд не образовались пробелы!
На самом деле юзеру нужно запретить нажимать гораздо больше клавиш (цифры, знаки, кириллицу) и правильнее указывать список разрешенных вариантов. Но в Вашей задаче он тоже слишком длинный. Может быть один из двух последних вариантов вас устроит? Или уточните, что бы Вы хотели получить, точнее для какой цели.
@DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ
Сообщение отредактировал ded2007 - Понедельник, 05.07.2010, 21:32
ded2007, спасибо огромное. В идеале будет установочный файл для создания флешки, пользователю нужно только будет выбрать флешку и состав устанавливаемых компонентов, всё остальное автоматом: создание правильной mbr, форматирование, установка загрузчика.
ded2007, спасибо, но надеюсь люди которые будут пользоваться загрузочной флешкой смогут и сами узнать что у них подключено. Хотя, можно и её прикрутить, при таком размере-то
Можно им помочь Составить список разрешенных букв для диска, а потом еще и информацию о выбранном диске предоставить.
REM Напоминаю про пробелы!!! @echo off setlocal EnableExtensions EnableDelayedExpansion
::::::::::::::::::::::::::::::: TAKE ListUsbDrives Set ListUsbDrives= for /f "tokens=* delims=" %%i in ('ListUsbDrives ^| find "MountPoint"') do ( Set Drive=%%i Set ListUsbDrives=!ListUsbDrives! !Drive:~20,1! ) Set ListUsbDrives=!ListUsbDrives:~1! Echo List Usb Drives: !ListUsbDrives: =:, !:
::::::::::::::::::::::::::::::: User's choice :reEnter Set /p letter="Choose your disk letter from the list (!ListUsbDrives!): " Set letter=!letter:~0,1! For %%i in ( !ListUsbDrives! ) do If %%i==!letter! goto:Continue goto:reEnter
::::::::::::::::::::::::::::::: Continue :Continue Set letter=!letter!: Echo. Echo Your choice is "!letter!" (read full INFO)
::::::::::::::::::::::::::::::: Full INFO Echo.----------- Set #z#=** for /f "tokens=1,2 delims==" %%a in ('ListUsbDrives' ) do ( Set #bb=%%b if "%%a"=="MountPoint " Set #z#=!#bb:~1,2!&REM if :!#z#!:==:!letter!: Echo.# %%a:!#bb:~0,50! ) Echo.-----------
endlocal exit /b
@DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ
Сообщение отредактировал ded2007 - Вторник, 06.07.2010, 10:14
ded2007, сенкс, можно ещё пару просьб: можно сделать так, чтобы ответы вида "h" и "H" были равнозначными; а при отсутствии флешки в системе выдавалось соответствующее предупреждение. И что должно отображаться после "Full INFO", у меня почему-то пустота...
Сообщение отредактировал zaval - Пятница, 09.07.2010, 21:59
что должно отображаться после "Full INFO", у меня почему-то пустота...
Кроме пробелов в конце строк оказалась еще одна засада. Несколько пробелов подряд собираются в один. После MountPoint
Quote (ded2007)
"MountPoint "
их должно быть 8 штук. Подправьте ручками...
...или используйте новый вариант с доработками:
@echo off setlocal EnableExtensions EnableDelayedExpansion if not exist ListUsbDrives.exe Echo.WANTED! ListUsbDrives.exe &Exit /b
::::::::::::::::::::::::::::::: TAKE ListUsbDrives Set ListUsbDrives=&REM for /f "tokens=* delims=" %%i in ('ListUsbDrives ^| find "MountPoint"') do ( Set Drive=%%i&REM Set ListUsbDrives=!ListUsbDrives! !Drive:~20,1!&REM ) Set ListUsbDrives=!ListUsbDrives:~1!&REM Echo List Usb Drives: !ListUsbDrives: =:, !:
::::::::::::::::::::::::::::::: User's choice :reEnter Set letter=&REM Set /p letter="Enter your disk letter or empty to EXIT (!ListUsbDrives!): " IF :!letter!:==:: Exit /b Set letter=!letter:~0,1!&REM for %%i in ( qQ wW eE rR tT yY uU iI oO pP aA sS dD fF gG hH jJ kK lL zZ xX cC vV bB nN mM) do ( set #1=%%i& set #2=!#1:~0,1!&rem if :!#2!:==:!letter!: set letter=!#1:~1,1!&rem )
For %%i in ( !ListUsbDrives! ) do If %%i==!letter! goto:Continue Echo.Disk !letter!: is not valid USB device. goto:reEnter
::::::::::::::::::::::::::::::: Continue :Continue Set letter=!letter!:&REM Echo. Echo Your choice is "!letter!" (read full INFO)
::::::::::::::::::::::::::::::: Full INFO Echo.----------- Set #z#=**&REM for /f "tokens=1,2 delims==" %%a in ('ListUsbDrives' ) do ( Set #1=%%a&REM Set #1=!#1: =!&REM Set #bb=%%b&REM if "!#1!"=="MountPoint" Set #z#=!#bb:~1,2!&REM if :!#z#!:==:!letter!: Echo.# %%a:!#bb:~0,50! ) Echo.-----------
endlocal exit /b
Здесь уже учтены проблемы с пробелами. Так что смело копируйте и вставляйте.
@DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ
Сообщение отредактировал ded2007 - Пятница, 29.04.2011, 18:13
спасибо а в формате для ghost например ghost32.exe -noide -clone,mode=pdump,src=2:1,dst=2:2\images\vol_c.gho -span -s -z5 -auto -fx -sure возможно получить Partition Name в виде переменной?
Quote (ded2007)
Ну, если у Ghost-a нумерация отличается от grub4dos на 1 (т.е. счет идет не с 0 , а с 1), то вот так (см. приложение). А что ваяем, если не секрет? Вот топик на RuBoard-е "Командная строка, батники, сценарии (bat, cmd)", может быть Вас заинтересует.
antey8, Вы перед снятием скриншота растяните пожалуйста окно терминала по вертикали или распахните, т.к. я хотел посмотреть какое меню выдается выше @DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ
Сообщение отредактировал ded2007 - Пятница, 29.04.2011, 18:30
Действительно, должен быть №4. Так, а вот это что за ерунда [hdVo,0]? Должно быть [hd3,0]. ... Вот! Странное сообщение в строке # :--| Volume DosDevName ожидается сообщение вида # :--| Volume DosDevName : \Device\Harddisk3\............ а получили # :--| Volume DosDevName : \Device\HarddiskVolume16 нужно подумать... @DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ
Так и задумывалось. А что не так? Похоже, что Вам не нравится ответ "4:1"?
Quote (antey8)
у меня пишет Ghost Partition Name:1:1 а насамомделе 3:1 вчём можетбыть дело?
Тогда уточняю, Вы уверены, что должно быть "3:1"? Ведь флэшка у Вас это четвертый диск (3 HDD + flash). Или Ghost диски считает с 0, а разделы с 1 (я, лично, просто не знаю, т.к. имел с ним дело всего пару раз и не по теме вопроса)? @DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ
Сообщение отредактировал ded2007 - Пятница, 29.04.2011, 19:35