|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Создание загручной флешки Window 7 с помощью командного файла |
|
|
CMD/BAT - [решено] Создание загручной флешки Window 7 с помощью командного файла
|
Старожил Сообщения: 262 |
Профиль | Отправить PM | Цитировать
Написал командный файл, для автоматизации создания загрузочного USB-драйва с Windows 7, без стороннего софта.
Для работы нужна флешка, с объемом минимум 4Гб + инсталляционный диск Windows 7 Предупреждение: USB-драйв будет отформатирован под файловую систему NTFS! Создаем командный файл с именем win72usb.cmd (скачать готовый файл можно здесь) запускать win72usb.cmd с правами администратора... следовать инструкциям на экране... (обновленный код - 27.1.2011) ЗЫ: Просьба, ногами сильно не бить! Если есть конкретные предложения по усовершенствованию батника - с удовольствием послушаю (прочту)... |
|
Отправлено: 23:43, 22-01-2011 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать 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:\bootmgr set CDROM=%%i: P.S. В предположении, что мы запускаем пакетный файл из-под «Windows 7», ибо ниже есть упоминание «choice.exe», которая в XP отсутствует. Следом ещё одна: Зачем вторично?! echo list disk>c:\script1.txt echo exit>>c:\script1.txt echo 5. Wait for list of existing disks... diskpart /s c:\script1.txt И, если уж вывод «diskpart» предлагается для последующего выбора, то его (вывод) стоит фильтровать, отображая ровно то, что является значимым для задачи. Предположение, что дисков может быть не более четырёх давно не соответствует истине. Во времена IDE на это ещё стоило полагаться, но нынче… Несерьёзно. Проще что-то наподобие: Можно и без «%%», лишь бы расширенная обработка команд была включена. Очередная, уже третья: А вот перед очисткой диска дополнительный запрос подтверждения необратимо деструктивных действий (с подсказкой) очень не помешал бы. Сначала Вы пишете, что: Цитата:
Такое впечатление, что Вы сложили в одну кучу несколько пакетных файлов, не слишком заботясь об их приведении к мало-мальски единому целому. Как-то так. |
|
Отправлено: 05:05, 23-01-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 262
|
Профиль | Отправить PM | Цитировать Цитата:
Очень давно батники не писал..)) Недавно, сел и за час накатал, от нечего делать... А временные файлы таки удаляются, в конце кода... Цитата:
Все таки, цель была батник написать, а не целую программу... Хотя, можно и проверки вставить. Цитата Iska:
|
|||
Последний раз редактировалось ArmDeForcer, 23-01-2011 в 12:36. Отправлено: 12:27, 23-01-2011 | #3 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать |
Отправлено: 14:04, 23-01-2011 | #4 |
Старожил Сообщения: 262
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Busla:
подредактировал Цитата Iska:
Цитата Iska:
Цитата Iska:
Цитата Iska:
Цитата Iska:
Итак, вот что получилось: @echo off echo ======================================== echo CREATING WINDOWS 7 INSTALLATION USB-DRIVE echo ********* by ArmDeForcer (C) 2011 ********* echo ======================================== echo ******************************************** echo PLEASE FOLLOW THE ONSCREEN INSTRUCTIONS! echo ******************************************** echo 1. PLUG IN YOUR USB-DRIVE... pause echo ******************************************** rem создаем на нужном USB диске текстовой файл с именем myusb.txt rem чтобы узнать на какой именно USB-драйв переносить файлы echo 2. CREATE AN EMPTY TEXT FILE echo ON YOUR USB-DRIVE, NAME IT myusb.txt pause echo ******************************************** rem находим и передаем в переменную букву диска for %%d in (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:\myusb.txt SET USBDrv=%%d: rem проверяем на присутствие файла bootmgr на флешке rem дабы избежать ошибки циклического копирования if exist %USBDrv%\bootmgr del %USBDrv%\bootmgr /f /q echo 3. INSERT YOUR WINDOWS DISK INTO DVD-DRIVE pause echo ******************************************** rem проверяем на присутствие диска и находим букву DVD привода for %%i in (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:\bootmgr set CDROM=%%i: rem проверяем, существуют ли временный файл с таким именем, если да - стираем if exist %%temp%%\script.txt del %%temp%%\script.txt /q echo 4. PLEASE WAIT FOR THE LIST OF EXISTING DISKS: echo list disk | diskpart echo ******************************************** rem передаем в переменную номер диска choice /c 0123456789 /m "5. CHOOSE YOUR USB-DRIVE NUMBER". set /A FLASH=%ERRORLEVEL%-1 :end echo ******************************************** echo 6. CREATING TEMP FILE... rem создаем скрипт echo select disk %%FLASH%%>%temp%\script.txt echo clean>>%temp%\script.txt echo create partition primary>>%temp%\script.txt echo select partition 1 >>%temp%\script.txt echo active>>%temp%\script.txt echo format fs=NTFS quick>>%temp%\script.txt echo assign letter=%%USBDrv%%>>%temp%\script.txt echo exit >>%temp%\script.txt echo ******************************************** rem подтверждение перед форматированием флешки echo 7. WARNING! YOUR USB-DRIVE WILL BE FORMATED echo TO NTFS FILE SYSTEM AND ALL DATA WILL BE LOST! choice /C YN /M "ARE YOU SURE YOU WANT TO CONTINUE?:" if errorlevel=2 Goto ex :end rem сам процесс echo ******************************************** echo 8. WAIT, CREATING A BOOT DRIVE PARTITION... diskpart /s %temp%\script.txt echo ******************************************** echo 9. CREATING OF BOOT DRIVE IS NOW COMPLETED! echo ******************************************** echo 10. LIST OF EXISTING DRIVES ON YOUR SYSTEM: echo ******************************************** rem никакого функционала, просто - понты wmic logicaldisk get caption,providername,drivetype,volumename,size echo ******************************************** echo 11. COPYING INSTALLATION FILES TO USB-DRIVE echo PLEASE WAIT... rem копируем файлы по тихому %CDROM%\Boot\bootsect.exe /nt60 %USBDrv% xcopy %CDROM% %USBDrv% /s /e /h /k /q echo ******************************************** echo 12. DELETING TEMP FILES echo ******************************************** rem подтираем за собой del %temp%\script.txt /q echo ******************************************** echo DONE! YOUR USB-DRIVE IS READY TO USE! echo PRESS ANY KEY TO FINISH! echo ******************************************** pause exit :ex del %temp%\script.txt /q echo ******************************************** echo EXITING COMMAND FILE! echo PRESS ANY KEY TO FINISH! echo ******************************************** pause exit |
||||||||
Отправлено: 21:14, 23-01-2011 | #5 |
Старожил Сообщения: 262
|
Профиль | Отправить PM | Цитировать В продолжение об:
Цитата Iska:
Значит, имеется код, который выводит буквы и номера доступных USB дисков... Пользователь выбирает нужный драйв... а дальше, как мне ассоциировать номер диска с его буквой и задать это в переменные? @echo off setlocal EnableDelayedExpansion set Q='wmic diskdrive where "interfacetype="USB"" assoc /assocclass:Win32_DiskDriveToDiskPartition' echo LIST OF USB-DRIVES FOUND ON YOUR SYSTEM: for /f "tokens=2,3,4,5 delims=,= " %%a in (%Q%) do ( set hd=%%a %%b, %%c %%d call :_LIST_LETTER !hd!) goto :_END :_LIST_LETTER (echo %1 |find "Disk ") >nul|| goto :_EOF for /f "tokens=3 delims==" %%a in ('WMIC Path Win32_LogicalDiskToPartition ^|find %1') do set TMP_letter=%%a set Part_letter=%TMP_letter:~1,2% echo %1 %Part_letter% goto :_EOF :_END choice /c 0123456789 /m "CHOOSE YOUR USB-DRIVE NUBER:" set /a DRVnum=%ERRORLEVEL%-1 echo YOU CHOOSED USB-DRIVE NUMBER %DRVnum% pause :_EOF |
|
Отправлено: 13:37, 24-01-2011 | #6 |
Старожил Сообщения: 262
|
Профиль | Отправить PM | Цитировать Ясно... никто не может помочь...
Решил проблему так: rem выбираем USB echo 2. LISTING PHYSICAL DRIVES ON YOUR SYSTEM: echo ____________________________________________________________________________________ wmic diskdrive list brief echo ____________________________________________________________________________________ echo ******************************************** choice /c 0123456789 /m "3. ENTER YOUR USB-DRIVE DeviceID NUMBER (PHYSICALDRIVE#):" set /a DRVnum=%ERRORLEVEL%-1 rem находим букву USB echo ******************************************** setlocal EnableDelayedExpansion set Q='wmic diskdrive where "Index="%DRVnum%" and Interfacetype="USB"" assoc /assocclass:Win32_DiskDriveToDiskPartition' for /f "tokens=2,3,4,5 delims=,= " %%a in (%Q%) do ( set hd=%%a %%b, %%c %%d call :_LIST_LETTER !hd!) goto :_next :_LIST_LETTER (echo %1 |find "Disk ") >nul || goto :eof for /f "tokens=3 delims==" %%a in ('WMIC Path Win32_LogicalDiskToPartition ^|find %1') do set TMP_letter=%%a set Part_letter=%TMP_letter:~1,2% echo 4. YOU CHOOSED DRIVE %Part_letter% %1 goto :eof :_next :eof |
Отправлено: 13:05, 26-01-2011 | #7 |
Ветеран Сообщения: 1014
|
Профиль | Отправить PM | Цитировать Извините, а можно объяснить поподробнее, что это за переменные и в каких случаях используются :
%USBDrv% и %DRVnum% ? Спасибо ! |
Отправлено: 03:38, 29-01-2011 | #8 |
Старожил Сообщения: 262
|
Профиль | Отправить PM | Цитировать Цитата shao:
DRVnum - сокращение от "drive number", это переменная хранит номер физического диска, который выбирает пользователь (смотрите код в шапке, остальное не актуально). Командный файл выдает список физических дисков в системе и просит выбрать номер вашего USB устройства (возможно в системе несколько таких), когда пользователь вводит номер - он присваивается переменной DRVnum, которая и используется в последующих командах... Затем по номеру выбираем нужный диск, проверяем, действительно ли у него интерфейс USB и находим букву, которую задаем в переменную Part_letter. Теперь, зная номер диска и букву тома, можно спокойно выполнять операции с флешкой... USBDrv - такая же переменная, использовалась в промежуточном коде, в процессе решения некоторых нюансов, в конечном коде - ее нет... |
|
Последний раз редактировалось ArmDeForcer, 29-01-2011 в 09:59. Отправлено: 09:37, 29-01-2011 | #9 |
Ветеран Сообщения: 1014
|
Профиль | Отправить PM | Цитировать Спасибо за ответ!
Цитата ArmDeForcer:
И ещё (не совсем в тему, но приблизительно) - как быть в таком случае: Вот , здесь например, всё понятно: А если у нас не CDROM, а USB-flash ? |
|
Отправлено: 10:13, 29-01-2011 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] подсчет времени выполнения командного файла | mitiya | Скриптовые языки администрирования Windows | 5 | 15-04-2014 10:42 | |
Запуск командного файла с переменной в теле | saavaage | AutoIt | 1 | 27-08-2010 13:21 | |
Dial-Up - Можно ли создать dial-up соединение с помощью командного файла? | Oleg48 | Сетевые технологии | 5 | 18-10-2009 11:52 | |
CMD/BAT - [решено] Сохранение структуры папок и ее воссоздание с помощью командного файла | Vadikan | Скриптовые языки администрирования Windows | 8 | 22-07-2009 01:56 | |
Автоматическая установка драйверов с помощью командного файла | Miha876 | Автоматическая установка Windows 2000/XP/2003 | 2 | 21-12-2007 03:17 |
|