Павлины, Конкретные предложения, говоришь … Я бы начал с общих.
Код:
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:
У меня в корне раздела установленной «Windows 7» лежит «bootmgr». Если DVD не был вставлен (или не опознан, ошибка чтения и пр.) — что будет с переменной окружения «CDROM»?
P.S. В предположении, что мы запускаем пакетный файл из-под «Windows 7», ибо ниже есть упоминание «choice.exe», которая в XP отсутствует.
Следом ещё одна:
Код:
@echo off
Зачем вторично?!
Код:
echo list disk>c:\script1.txt
echo exit>>c:\script1.txt
echo 5. Wait for list of existing disks...
diskpart /s c:\script1.txt
Ну, а если нет «c:»?! Почему создаём не в положенном месте, «%temp%»? Вообще, имя файла («c:\script1.txt») лучше задать один раз, затем использовать переменную.
И, если уж вывод «diskpart» предлагается для последующего выбора, то его (вывод) стоит фильтровать, отображая ровно то, что является значимым для задачи.
Код:
choice /C 01234 /M "6. Choose your USB-drive number".
Предположение, что дисков может быть не более четырёх давно не соответствует истине. Во времена IDE на это ещё стоило полагаться, но нынче… Несерьёзно.
Код:
set FLASH=0
if errorlevel=5 Goto 1
…Длинная портянка кода…
:4
set FLASH=1
Goto end
:end
Проще что-то наподобие:
Код:
set /a FLASH=%ERRORLEVEL% - 1
Можно и без «%%», лишь бы расширенная обработка команд была включена.
Очередная, уже третья:
Код:
@echo off
Код:
echo clean>>c:\script2.txt
…
diskpart /s c:\script2.txt
А вот перед очисткой диска дополнительный запрос подтверждения необратимо деструктивных действий (с подсказкой) очень не помешал бы.
Сначала Вы пишете, что:
Цитата:
единственное - вначале батник просит создать текстовой файл с названием myusb.txt в корневой директории флешки, чтобы определить ее букву и не перепутать с другим диском...
|
а затем в скрипте «ручками» предлагаете указывать диск. Буквально на днях была тема по решению близкой задачи — найти взаимное соответствие Диск⇔Раздел⇔Логический диск. Переменные не очищаются, а команды «setlocal» нету, файл в корне диска C: создаётся и не удаляется. Зато «@echo off» целых три…
Такое впечатление, что Вы сложили в одну кучу несколько пакетных файлов, не слишком заботясь об их приведении к мало-мальски единому целому. Как-то так.